Apache中解决动态地址跳转死循环的方法
问题背景:矿秘书网的历史遗留问题,刚开始由于各种问题,一些动态页面都是用了?id=参数的形式,对seo/seo.html"target="_blank">搜索引擎不友好,经常多方面考虑,还是改成伪静态。这里劝各位站长在做新站时,尽量使用伪静态,不仅对搜索引擎,对用户体验也友好。
问题描述:需要将/news/show_news.php?id=1形式的地址伪静态成/news/1形式,而且/news/show_news.php?id=1在浏览器打开要301跳转到/news/1去。
但是在.htaccess加入规则,出现了死循环,死循环规则如下
RewriteRule^(d+)$/news/show_news.php?id=$1[L] RewriteCond%{QUERY_STRING}^id=(d+)$[NC] RewriteRule^show_news.php$/news/%1?[L,R=301]
死循环原因:/news/show_news.php?id=1跳转到/news/1,而且/news/1被重写为/news/show_news.php?id=1,/news/show_news.php?id=1再次跳转到 /news/1,这样,泪流满面!
解决办法:只要在rewrite的时候,添加一个常量参数,这样的url和301的url就不一样了,规则如下:
RewriteRule^(d+)$/news/show_news.php?id=$1&r=1[L] RewriteCond%{QUERY_STRING}^id=(d+)$[NC] RewriteRule^show_news.php$/news/%1?[L,R=301]
终于解决了,泪奔……
以上为真实案例,环境是apache。