迁移WordPress后,如何用.htaccess重定向指定参数URL至分类页面?
解决旧URL带查询参数的301重定向问题
我来帮你搞定这个404转301重定向的问题!你之前写的规则无效,核心原因是RewriteRule默认只匹配URL的路径部分(也就是域名后面?之前的内容),根本不会处理?后面的查询字符串——直接把查询参数写在RewriteRule的匹配模式里完全行不通。
正确的规则写法
针对你给出的示例URL(比如domain.com/?q=string+string1&p=2&s=),需要用RewriteCond来匹配查询字符串,再配合RewriteRule完成重定向。把下面的规则放到你的.htaccess文件最顶部(或者Apache的虚拟主机配置里):
RewriteEngine On # 匹配包含q=string+string1、p=2、s=空值的查询字符串(参数顺序不影响) RewriteCond %{QUERY_STRING} (^|&)q=string\+string1(&|$) RewriteCond %{QUERY_STRING} (^|&)p=2(&|$) RewriteCond %{QUERY_STRING} (^|&)s=(&|$) # 重定向到目标分类页面,清空原查询字符串 RewriteRule ^$ /category/name/? [R=301,L,QSD]
规则细节解释
RewriteEngine On:先确保mod_rewrite模块处于启用状态(如果你的服务器还没开,得先在Apache配置里开启mod_rewrite.so)- 三条
RewriteCond:分别匹配查询字符串里的三个参数,(^|&)和(&|$)是为了兼容参数在任意位置的情况(比如参数顺序变了也能匹配);另外+是正则特殊字符,所以要转义成\+ RewriteRule ^$:匹配根路径(因为原URL的路径部分是空的,就是域名直接加?)[R=301,L,QSD]:R=301:永久重定向,对SEO友好,告诉搜索引擎旧URL已经永久迁移到新地址L:表示这是最后一条规则,匹配成功后就停止处理后续规则QSD:自动丢弃原查询字符串,避免旧参数被带到新URL里(如果你的Apache版本低于2.4,可以去掉QSD,用目标路径末尾的?来实现类似效果)
注意事项
- 测试阶段可以先用
R=302临时重定向,确认规则生效后再改成R=301——因为301会被浏览器缓存,一旦写错不容易调试 - 如果还有其他类似的旧URL需要重定向,只需要复制这套规则,修改对应的查询参数和目标路径即可
- 确保你的
.htaccess文件所在目录允许Override All(在Apache配置里设置AllowOverride All),否则规则不会生效
内容的提问来源于stack exchange,提问作者NVO
相关产品推荐
相关产品推荐

