将/index.php?country=a重定向到/ a /由htaccess

时间:2016-04-06 07:12:59

标签: php .htaccess url clean-urls

重定向

www.example.com/index.php?country=a

www.example.com/a/

尝试:

RewriteCond %{QUERY_STRING} index.php?country=a [OR]
RewriteCond %{REQUEST_URI} index.php?country=a
RewriteRule ^ http://www.example.com/a/? [L,R=301]

不起作用。

注意:

1)如果a是动态的(我的列表中有60个国家/地区),此代码也是一个坏主意。

2)index.php?country=a之后的任何事情,例如index.php?country=a&p=d&xx=k被移除。

3 个答案:

答案 0 :(得分:0)

变量%{QUERY_STRING}表示网址的查询部分(?之后的部分),

所以你无法匹配模式中的uri index.php,请尝试:

RewriteCond %{QUERY_STRING} ^country=([^&]+)(?:&(.*))?$ [NC]
RewriteRule ^ http://www.example.com/%1/? [L,R=301]

或者

RewriteCond %{THE_REQUEST} /index\.php\?country=([^&]+)
RewriteRule ^ http://www.example.com/%1/? [L,R=301]

在测试这些规则之前清除浏览器的缓存。

答案 1 :(得分:0)

RewriteRule ^/([a-zA-Z]+) index.php?country=$1 [NC,L]

它可以帮助您从任何值获得一个干净的URL,而不仅仅是'a'

答案 2 :(得分:0)

RewriteRule ^a$ index.php?country=a [NC,L]

这个肯定有效...确保index.php?country = a不在任何子目录中