2012-10-27 87 views
1

我想重定向與查詢字符串的URL網址沒有查詢字符串,但是,我想從查詢字符串中使用的值。重定向從查詢字符串的.htaccess到URL

在我的例子下面我用一個單一的狀態,但是我希望它是動態的,這意味着它將解析與查詢字符串的任何URL到其中仍包含查詢字符串值一個乾淨的URL。

Example: http://www.mywebsite.com/?state=CA redirects to http://www.mywebsite.com/CA/ 

我已經厭倦了下面的信息添加到我的.htaccess文件,沒有運氣:

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)&type=([a-z\-]+) 
RewriteRule^/%1/%2? [L] 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)($|\) 
RewriteRule^/%1? [L] 

這些都不過工作,我必須輸入每一個重定向,我想避免:

RewriteCond %{QUERY_STRING} state=FL 
RewriteRule ^$ "http://www.mywebsite.com/fl/?" [R=301,L] 
RewriteCond %{QUERY_STRING} state=RI 
RewriteRule ^$ "http://www.mywebsite.com/ri/?" [R=301,L] 

任何想法?我在Apache上使用WordPress。我相信一切都是最新的。

回答

0

原因,原來的規則將無法正常工作的原因是因爲它看起來像你的狀態是:

state=FL 

FL永遠不會匹配正則表達式[a-z]+,因爲[a-z]字面意思是任何小寫字母,也不F和L都是小寫字母。嘗試:

Options +FollowSymlinks 
RewriteEngine On 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)&type=([a-z\-]+) [NC] 
RewriteRule^/%1/%2? [L,R=301] 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?state=([a-z]+)($|\) [NC] 
RewriteRule^/%1? [L,R=301] 

所以[NC]標誌中的條件使得它如此的正則表達式不區分大小寫。

+0

我在使用該代碼時收到500錯誤。下面的代碼也在我的htaccess文件中,因爲它是WordPress。這是否會導致問題? –

+0

RewriteBase/ 重寫規則^指數\ $ .PHP! - [L] 的RewriteCond%{} REQUEST_FILENAME -f 的RewriteCond%{} REQUEST_FILENAME -d 重寫規則。的index.php [L],他們需要你的WordPress規則之前去 –

+0

@JonPotts,也需要在規則中添加一個'R = 301'標誌(見編輯) –

相關問題