使用.htaccess将含特殊字符的URL 301重定向至首页失败排查
解决带查询字符串的301重定向问题
你原来的规则失效,核心原因是mod_alias的Redirect指令不处理URL中的查询字符串(也就是?后面的部分),它只能匹配?之前的路径内容,所以你的目标URL里的?404;http://www.domain.co.uk:80/sn-down-to-earth.html这部分,Redirect根本匹配不到。
要解决这个问题,得改用mod_rewrite规则,它可以精准匹配查询字符串。在你的.htaccess文件里添加以下规则(如果已经有RewriteEngine On就不用重复写了):
RewriteEngine On RewriteCond %{QUERY_STRING} ^404;http://www\.domain\.co\.uk:80/sn-down-to-earth\.html$ RewriteRule ^$ https://www.domain.co.uk/? [R=301,L]
规则说明:
RewriteCond %{QUERY_STRING} ...:精准匹配完整的查询字符串内容,注意把URL里的.转义成\.,避免正则匹配出错。RewriteRule ^$:匹配根路径(因为原URL的路径是/)。- 重定向URL末尾的
?:用来清除原URL的查询字符串,确保重定向后的地址干净。 R=301:指定永久重定向,L表示匹配到这条规则后就停止处理后续规则。
把这条规则放在其他重定向规则的前面,保证它优先被匹配执行。
内容的提问来源于stack exchange,提问作者Chudz
相关产品推荐
相关产品推荐

