2013-06-19 138 views
0

我在參數中傳遞國家代碼,我希望重寫該URL。 如重寫URL並將重定向設置爲重寫URL

www.website.com/deal.php?country_code=gb

www.website.com/gb

到目前爲止,我已經能夠使用

重寫一遍
RewriteEngine on 
RewriteBase/


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Match the first two groups before/and send them to the query string 
RewriteRule ^([A-Za-z-]+)?$ deal.php?country_code=$1 [L,R=301] 

因此,我可以訪問www.website.com/gb,它的工作原理,但我仍然可以訪問www.website.com/deal.php?country_code=gb。理想情況下如果我嘗試訪問www.website.com/deal.php?country_code=gb,我希望它重定向到/ gb

我該怎麼做?

+1

如果你這樣做,你將會得到一個重定向循環 – DevZer0

回答

0

我真的不認爲有必要重定向長URL的請求,但如果你真的想這樣做,那麼你必須改變實際的URL,以便不輸入無限循環。

例如,嘗試這.htaccess文件:

RewriteCond %{QUERY_STRING} !new_path=true 
RewriteCond %{QUERY_STRING} country_code=([a-zA-Z]{2}) 
RewriteRule ^deal\.php$ /%1? [R=permanent] 
RewriteRule ^([a-zA-Z]{2})$ deal.php?country_code=$1&new_path=true 

前兩個指令的RewriteCond檢查new_path=true未在查詢字符串中發現,和一個國家代碼。如果兩者都滿足,則第一個RewriteRule將瀏覽器重定向到具有空查詢字符串的首選短網址。

最後的RewriteRule將一個國家代碼的請求默默地重寫到deal.php頁面,並添加new_path=true參數,以便不輸入無限循環。

請注意,上述模式僅允許使用兩個字符的國家/地區代碼。如果您需要允許兩個和三個字符的國家/地區代碼,則將該模式的相關部分改爲([a-zA-Z]{2,3})