WordPress URL重写问题:移除location参数后路径异常
WordPress URL重写修复:移除location参数并保留完整路径
问题现象
- 本地环境:原URL
http://localhost/mydirectory/restaurants/japanese/?location=london,期望跳转至http://localhost/mydirectory/restaurants/japanese/london,但现有规则返回http://localhost/mydirectory/location/london/ - 测试服务器:原URL
https://example.com/de/restaurants/japanese/?location=Berlin,期望跳转至https://example.com/de/restaurants/japanese/Berlin,但现有规则返回的URL缺失/de/前缀
现有规则问题分析
- 本地环境规则:
RewriteRule (.*) ^/%1?丢弃了原请求路径($1),直接跳转到根目录下的location参数值,导致路径丢失 - 测试服务器规则:
RewriteRule ^(.*)$ /$1/%1?使用了绝对路径开头的/,忽略了RewriteBase /de/的配置,导致生成的URL缺失前缀
修正后的规则
本地环境配置
RewriteEngine On RewriteBase /mydirectory/ # 精确匹配仅含location参数的请求,避免匹配多参数场景 RewriteCond %{QUERY_STRING} ^location=([^&]+)$ [NC] # 保留原路径,追加location参数值,清空查询字符串 RewriteRule ^(.*)$ $1/%1? [R=301,L]
测试服务器配置
RewriteEngine On RewriteBase /de/ # 精确匹配仅含location参数的请求 RewriteCond %{QUERY_STRING} ^location=([^&]+)$ [NC] # 结合RewriteBase生成带前缀的完整路径,追加location参数值 RewriteRule ^(.*)$ $1/%1? [R=301,L]
关键说明
- 将
location=(.*)改为location=([^&]+),可以避免当URL存在多个参数时错误匹配多余内容 - 测试阶段建议将
R=301临时改为R=302,防止浏览器缓存永久跳转规则影响测试结果,确认正常后再改回301 - 确保WordPress后台「设置-固定链接」的配置与重写规则兼容,避免冲突
- 测试前清除浏览器缓存,或使用隐私窗口访问,排除缓存干扰
内容的提问来源于stack exchange,提问作者hubsei88
相关产品推荐
相关产品推荐

