西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > 开发教程 > linux教程 >

rewrite对网址后面有问号的url进行301跳转

时间:2016-04-14 01:43来源: 作者: 点击:
对新做的网站进行了rewrite,结果rewrite之前的网址还是被百度收录了,反正心里就是不爽,就想把rewrite之前的页面301到rewrite之后的页面上来,结果遇到了一点点问题 rewrite的 RewriteRule

对新做的网站进行了rewrite,结果rewrite之前的网址还是被百度收录了,反正心里就是不爽,就想把rewrite之前的页面301到rewrite之后的页面上来,结果遇到了一点点问题…

rewrite的RewriteRule不支持?后面的参数,也就是说如果我写 RewriteRule ^view.php?id=([0-9]+)$ http://list.chenwei.me/a/%1? [L,R=301] 是没有效果的,经过网上搜索和尝试,最终找到了如下解决方案:

RewriteCond %{HTTP_HOST} ^www.chenwei.me [NC]

 

RewriteCond %{QUERY_STRING} ^id=(.*)$ [NC]

RewriteRule ^view.php$ http://list.chenwei.me/a/%1? [L,R=301]

上面的方法是通过来进行过滤判断可以避免死循环,如果是同一个域名下,就会出现重定向过多死循环。

以下转自:http://www.tanbo.name/html/486.html

问题描述:

需要将/if.php?id=1&cid=2形式的url伪静态为a/1/2.html形式 ,所有if.php?id=1&cid=2形式的url需要跳转到a/1/2.html形式

于是在.htaccess中写入

RewriteRule ^a/([0-9]+)/([0-9]+).html$ /if.php?id=$1&cid=$2 [L]

RewriteCond %{QUERY_STRING} ^id=([0-9]+)&cid=([0-9]+)$ [NC]
RewriteRule ^if.php$ /a/%1/%2.html? [L,R=301]

访问/if.php?id=1&cid=2,浏览器提示循环重定向,死循环
因为以上重写将使/if.php?id=1&cid=2跳转到a/1/2.html,而a/1/2.html又被重写为/if.php?id=1&cid=2,/if.php?id=1&cid=2再次跳转到a/1/2.html,然后果断悲剧。

解决方法:

RewriteRule ^a/([0-9]+)/([0-9]+).html$ /if.php?id=$1&cid=$2&r=1 [L]

RewriteCond %{QUERY_STRING} ^id=([0-9]+)&cid=([0-9]+)$ [NC]
RewriteRule ^if.php$ /a/%1/%2.html? [L,R=301]

改成如上写法之后,重写过程变为 /if.php?id=1&cid=2跳转到a/1/2.html,而a/1/2.html又被重写为/if.php?id=1&cid=2&r=1,/if.php?id=1&cid=2&r=1 不符合重写规则,重写结束

(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------