我在参数中传递国家/地区代码,我希望重写该网址。 例如
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
我该怎么做?
答案 0 :(得分: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会将浏览器重定向到带有空查询字符串的首选短URL。
最终的RewriteRule会自动将对国家/地区代码的请求重写为deal.php页面,并添加new_path=true
参数,以便不输入无限循环。
请注意,上述模式仅允许使用双字符国家/地区代码。如果您需要允许使用两个和三个字符的国家/地区代码,请将模式的相关部分更改为([a-zA-Z]{2,3})
。