Keep on going, never give up.

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升级了自己会考虑这个问题,到时候一句话就可以解决了。

更多文章:

htaccess rewrites重写规则实例

完美解决IIS和APACHE的301重定向

Apache服务器httpd.conf配置文件说明

如何为Apache绑定多IP多域名

参考文章:

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

相关评论(0):  

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

订阅博客

最新文章

本站采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载也必须遵循“署名-非商业用途-保持一致”的创作共用协议. 返回顶部
Copyright@2005-2016 Metsky.com, All rights Reserved.