HTACCESS设置URL QUERY_STRING重定向
今天想写一条类似把abc.php?id=1重定向到abc/1的重定向语句,该重定向对使用过WORDPRESS博友而言都很熟悉,WP后台自带了这个伪静态规则,GOOGLE了大半个小时,关于QUERY_STRING处理方法文章很多,但对解决本问题而言,关键之处鲜有提及,最后还是跑到Apache官网才得以解决,其实就只是个问号的放置位置问题。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^id=(.+) [NC]
RewriteRule ^abc.php$ /abc/%1? [R=301,L]
</IfModule>
延伸一下,此情况还适应于如下情况:
abc.php?id=123重定向到123,连abc前缀也不需要。
RewriteCond %{QUERY_STRING} ^id=(.+) [NC]
RewriteRule ^abc.php$ %1? [R=301,L]
abc.php?id=123重定向到def/id/123,更换目录。
RewriteCond %{QUERY_STRING} ^id=(.+) [NC]
RewriteRule ^abc.php$ /def/id/%1? [R=301,L]
/?id=123重定向到id/123。
RewriteCond %{QUERY_STRING} ^id=(.+) [NC]
RewriteRule ^$ /id/%1? [R=301,L]
以上规则,还遇到一个问题,就是如果想让一个RewriteCond适应于多个RewriteRule,就非常麻烦,网上有说采用取非的方法,但似乎并不适合本文的需求,还是多次重复写RewriteCond和RewriteRule好了,或许哪天APACHE升级了自己会考虑这个问题,到时候一句话就可以解决了。
更多文章:
参考文章:
httpd.apache.org/docs/current/rewrite/flags.html#flag_s
http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_rewrite.html
