如果這是一個重複的話,我真的很抱歉,但我用谷歌和搜索也是這裏找不到任何會爲我工作。也許我只是不知道究竟要搜索什麼。重寫規則阻擋的RewriteCond重寫規則及後
不管怎樣,回到我的問題:
我試圖改變舊醜陋的URL網址更好(想有news/XXX/XY
,但相對鏈接擊敗了我),所以我寫的代碼,幾行到我的.htaccess和測試他們(嗯,我實際上使用相同的代碼在我的其他頁面重定向,所以我知道它的工作)。我重定向從/news.php
到/news
,但查詢字符串神奇的是不工作...
RewriteRule ^news.php$ /news [L,NC,R=301]
RewriteRule ^news?$ /news.php [L,NC]
RewriteCond %{THE_REQUEST} /news\?rowstart=([^\s]+) [NC]
RewriteRule^news-row-%1? [R=302,L]
RewriteCond %{THE_REQUEST} /news\?readmore=([^\s]+)&rowstart=([^\s]+) [NC]
RewriteRule^news-%1-%2? [R=302,L]
RewriteCond %{THE_REQUEST} /news\?readmore=([^\s]+) [NC]
RewriteRule^news-%1? [R=302,L]
中的RewriteRules的無後第一個被執行。但如果我改變我的.htaccess是這樣的:
RewriteRule ^news.php$ /news [L,NC,R=301]
RewriteCond %{THE_REQUEST} /news\?rowstart=([^\s]+) [NC]
RewriteRule^news-row-%1? [R=302,L]
RewriteCond %{THE_REQUEST} /news\?readmore=([^\s]+)&rowstart=([^\s]+) [NC]
RewriteRule^news-%1-%2? [R=302,L]
RewriteCond %{THE_REQUEST} /news\?readmore=([^\s]+) [NC]
RewriteRule^news-%1? [R=302,L]
RewriteRule ^news?$ /news.php [L,NC]
然後它的工作。我嘗試使用/\?bla
- /news\?bla
- /news\.php\?bla
等沒有實際工作。
是否有人有任何想法,爲什麼它的行爲就像這個問題以及如何解決它?它看起來像從news.php
文件開始加載後不能識別news
。
我完全地失去了,因爲我不跟的.htaccess經常工作。有任何想法嗎?
其實,我結束了使用此:
#########################
# NICE URLS QUERIES #
#########################
RewriteCond %{THE_REQUEST} /news(?:\.php|)\?rowstart=([^\s]+) [NC]
RewriteRule^news-page-%1? [R=302,L]
RewriteCond %{THE_REQUEST} /news\(?:\.php|)\?readmore=([^\s]+)&rowstart=([^\s]+) [NC]
RewriteRule^news-%1-%2? [R=302,L]
RewriteCond %{THE_REQUEST} /news(?:\.php|)\?readmore=([^\s]+) [NC]
RewriteRule^news-%1? [R=302,L]
RewriteRule ^news-([0-9]+)-([0-9]+)?$ news.php?readmore=$1&rowstart=$2 [L,QSA,NC]
RewriteRule ^news-([0-9]+)/?$ news.php?readmore=$1 [L,QSA,NC]
RewriteRule ^news-page-([0-9]+)/?$ news.php?rowstart=$1 [L,QSA,NC]
#######################
# OTHER NICE URLS #
#######################
RewriteRule ^news.php$ /news [L,NC,R=301]
RewriteRule ^news?$ /news.php [L,NC]
嗯,這真的很好。我實際上最終使用了類似的東西(我將代碼放在我的問題中),但由於我沒有使用.htaccess和apache,我只是使用ORP標誌來存儲.PHP文件版本。你能詳細介紹一下''(?:\。php |)''嗎?當我試圖使用(其實我沒有用''?'',它只是放在''.php''到''%1'' ...謝謝 – MiChAeLoKGB
@MiChAeLoKGB的':?'使'()'所做的分組未被捕獲,所以它不能被反向引用。參見http://stackoverflow.com/questions/10804732/what-is-the-difference-between-and-in-regex它基本上意味着可以是一個'.php'或沒有,使得'.php'可選如果您刪除':?',括號成爲捕獲分組和'%1'最終會逆向引用它,而不是 –
感謝有關信息,所以我使用了部分代碼和我的代碼的一部分,現在它的工作原理...它很繁瑣,以改變CMS上的URL ... .htaccess它的好,但你仍然必須改變誰知道白癡鏈接多少個文件:D Anway,謝謝你的幫助。 – MiChAeLoKGB