0

我在一个参数中传递了一个国家代码,我希望重写那个 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

我怎样才能做到这一点?

4

1 回答 1

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

于 2013-06-20T15:11:36.467 回答