从WordPress迁移后,如何编写.htaccess规则实现带参数的301重定向?
带可变参数的.htaccess 301重定向实现方案
直接在你的.htaccess文件最顶部(WordPress自带规则块之前)添加以下规则即可实现需求:
RewriteEngine On RewriteCond %{QUERY_STRING} ^g=([^&]+)$ RewriteRule ^people/$ /item-list?people=%1 [R=301,L,NE]
规则细节说明
RewriteEngine On:启用Apache的URL重写模块,所有重定向规则都依赖这个指令生效RewriteCond %{QUERY_STRING} ^g=([^&]+)$:精准匹配查询字符串仅为g=xxx的请求,([^&]+)会捕获g=之后的所有内容(包含空格、字母等任意非&字符),捕获到的参数值暂存到%1变量中RewriteRule ^people/$ /item-list?people=%1 [R=301,L,NE]:匹配路径为/people/的请求,将其永久重定向(R=301)到/item-list页面,并把之前捕获的参数值赋值给新的people参数;L表示执行完这条规则后停止后续规则解析,NE确保参数中的特殊字符(比如空格)不会被额外编码,保证参数值原样传递
注意事项
- 务必将这条规则放在WordPress默认的
# BEGIN WordPress注释块之前,否则会被WordPress的重写规则覆盖,无法生效 - 如果原请求可能附带其他查询参数(比如
?g=Joe Smith&foo=bar),可以调整条件为RewriteCond %{QUERY_STRING} (^|&)g=([^&]+)(&|$),并添加QSAflag保留其他参数,修改后的规则如下:RewriteEngine On RewriteCond %{QUERY_STRING} (^|&)g=([^&]+)(&|$) RewriteRule ^people/$ /item-list?people=%2 [R=301,L,NE,QSA] - 测试阶段建议先使用
R=302(临时重定向),确认规则符合预期后再改为R=301,避免浏览器缓存错误的重定向规则
内容的提问来源于stack exchange,提问作者Cory
相关产品推荐
相关产品推荐

