现在的位置: 网页制作教程网站制作经验 >正文
网页高级教程

如何解决网站伪静态化原地址301后出现死循环

发表于2016/11/14 网站制作经验 0条评论 ⁄ 热度 2,347℃
导语:死循环不仅浪费服务器资源,还会造成用户体验不好,也会影响网站的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。

  • 暂无评论