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

Redirecting /index.php?country=a to /a/ by htaccess

重定向

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 将被删除。

变量%{QUERY_STRING}表示url、

的查询部分(?后面的部分)

所以你不能匹配模式中的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]

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

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

它将帮助您从任何值中获得干净的 URL,而不仅仅是 'a'

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

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