301/410重定向规则失效问题求助(非技术背景)
Apache重定向规则修复方案
核心问题说明
Apache的RewriteRule默认只匹配URL的路径部分(?前面的内容),不包含查询字符串(?后面的参数)。另外规则里的语法错误(比如逗号后加空格)会导致500错误,还有Redirect指令无法处理带查询参数的URL,必须用RewriteCond+RewriteRule的组合。
问题1:410规则导致500错误
错误原因:
[R=410, L]里逗号后面加了空格,属于语法错误- 直接在
RewriteRule里写查询字符串,规则不生效
正确规则:
# 针对已删除的相册thumbnails.php?album=62返回410 RewriteCond %{QUERY_STRING} ^album=62$ RewriteRule ^stock/thumbnails\.php$ - [R=410,L]
问题2:301重定向无效果(显示404)
错误原因:
RewriteRule没匹配查询字符串,Redirect指令不支持带查询参数的URL跳转
正确规则:
针对thumbnails.php?album=36的跳转
RewriteCond %{QUERY_STRING} ^album=36$ RewriteRule ^stock/thumbnails\.php$ https://www.example.com/gallery/appalachian-trail-photos/ [R=301,L]
针对index.php?cat=2的跳转
RewriteCond %{QUERY_STRING} ^cat=2$ RewriteRule ^stock/index\.php$ https://www.example.com/gallery/outdoor-recreation-photos/ [R=301,L]
问题3:图片展示页重定向/410无效
错误原因:
- 规则里用了HTML转义的
&,实际URL里的参数分隔符是&,匹配不生效 - 没通过
RewriteCond匹配查询字符串
正确规则:
针对displayimage.php?album=1开头的URL跳转
# 匹配所有包含album=1的displayimage.php请求 RewriteCond %{QUERY_STRING} (^|&)album=1(&|$) RewriteRule ^stock/displayimage\.php$ https://www.example.com/gallery/canadian-wildlife-photos/ [R=301,L]
针对displayimage.php?album=32的URL返回410
# 匹配所有包含album=32的displayimage.php请求 RewriteCond %{QUERY_STRING} (^|&)album=32(&|$) RewriteRule ^stock/displayimage\.php$ - [R=410,L]
新手必看注意事项
- 把这些规则放在
.htaccess文件的最顶部,避免被其他规则覆盖干扰 - 确保你的服务器开启了
mod_rewrite模块(大部分虚拟主机默认开启,不确定就联系主机商) - 测试前先清空浏览器缓存,因为301永久重定向会被浏览器缓存旧记录
- 规则里的
.要写成\.,否则会匹配任意字符,导致规则出错
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

