明凯博客

关注网站技术,一个特立独行的程序员

动态地址301跳转到伪静态时死循环解决办法

这篇文章来给各位同学介绍动态地址rewrite伪静态,然后301跳转到伪静态时死循环解决办法,有碰到此类的朋友可进入参考。

一些动态页面都是用了?id=参数的形式,对搜索引擎不友好,经常多方面考虑,还是改成伪静态。这里劝各位站长在做新站时,尽量使用伪静态,不仅对搜索引擎,对用户体验也友好。

问题描述:需要将 /news/show_news.php?id=1 形式的地址伪静态成 /news/1 形式,而且 /news/show_news.php?id=1 在浏览器打开要 301 跳转到 /news/1 去。

但是在 .htaccess 加入规则,出现了死循环,死循环规则如下

1
2
3
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就不一样了。

规则如下:

1
2
3
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]

, , , ,

相关文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注