重写URL并将重定向设置为重写的URL

时间:2013-06-19 11:35:34

标签: apache .htaccess mod-rewrite url-rewriting

我在参数中传递国家/地区代码,我希望重写该网址。 例如

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 个答案:

答案 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})