2012-12-12 50 views
0

我已經遍佈整個stackoverflow搜索,但沒有一個答案似乎適用於這種情況。我的httpd.conf文件中已經有了很多mod_rewrite規則。我剛剛發現,谷歌已收錄我的非重寫的網址之一,在它的查詢字符串:mod_rewrite重定向URL與查詢字符串

http://domain.com/?state=arizona

我想使用mod_rewrite做301重定向到該網址:

http://domain.com/arizona

問題是,在我的重寫規則中,第二個URL正在被重寫以將查詢變量傳遞給WordPress。它最終得到改寫爲:

http://domain.com/index.php?state=arizona

哪一個是正確的功能。到目前爲止,我嘗試過的所有東西都沒有成功,或者讓我陷入無盡的重寫循環。這就是我現在所擁有的,這是陷入一個循環:

RewriteCond %{QUERY_STRING} state=arizona [NC] 
RewriteRule .* http://domain.com/arizona [R=301,L] 
#older rewrite rule that passes query string based on URL: 
RewriteRule ^([A-Za-z-]+)$ index.php?state=$1 [L] 

這給了我無盡的重寫循環,帶我到這個網址: http://domain.com/arizona?state=arizona

然後我嘗試這樣做:

RewriteRule .* http://domain.com/arizona? [R=301,L] 

它擺脫了URL中的查詢字符串,但仍然創建一個循環。

回答

0

RewriteCond %{REQUEST_URI} ^/\?state=arizona$ [NC]

應該

RewriteCond %{QUERY_STRING} state=arizona [NC]

的REQUEST_URI的結束?令牌。

+0

這也行不通,因爲我進入了一個重寫循環。 – meeble

+0

您可能需要將'RewriteRule ^([\ w-] +)$ index.php?state = $ 1 [L]'加緊到'RewriteRule ^([a-z _] +)$ index.php?state = $ 1 [L]'。 index.php將不匹配,不會重定向。 – Wige

+0

「點」字符如何匹配字符類[\ w-]?無論如何,我改變了上面,但仍然有相同的循環。 – meeble

1

好,加上第2的RewriteCond終於修好了 - 現在重寫正確,沒有循環:

# redirect dynamic URL: ?state=arizona 
RewriteCond %{QUERY_STRING} state=arizona [NC] 
RewriteCond %{REQUEST_URI} ^/$ [NC] 
RewriteRule .* http://domain.com/arizona? [R=301,L] 
# older rewrite rule that passes query string based on URL: 
RewriteRule ^([A-Za-z-]+)$ index.php?state=$1 [L] 

而這裏的代碼,使其任何狀態值,而不只是亞利桑那州:

RewriteCond %{REQUEST_URI} ^/$ [NC] 
RewriteCond %{QUERY_STRING} ^state=([A-Za-z-]+)$ [NC] 
RewriteRule .* http://domain.com/%1? [R=301,L] 
相關問題