导语:死循环不仅浪费服务器资源,还会造成用户体验不好,也会影响网站的seo优化,蜘蛛进去容易出来难。所以我们要避免死循环的发生。
近来就遇到过一个真实的案例,是关于网站伪静态化后,原来的动态网址301到静态网址后,就出现了死循环。本站还有一篇文章介绍了IIS7和IIS8配置伪静态的方法。
问题描述:需要将 /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。
声明:如需转载,请注明来源于www.webym.net并保留原文链接:http://www.webym.net/jiaocheng/207.html