如何通过Nginx将WordPress默认搜索URL从/?s=重写为/search/
WordPress Nginx搜索URL干净化配置方案
原有重写规则不生效核心有两点原因:一是$query_string变量存储的是URL中?之后的查询串内容,正则匹配时不需要额外加\?前缀,导致规则完全匹配不到请求;二是只做了旧URL到新路径的跳转,没有配置新路径回传给WordPress识别的规则,跳转后WordPress无法识别搜索请求,会返回404。
正确配置步骤
在Nginx对应的站点server块中添加以下两段规则即可:
- 旧搜索URL 301跳转到干净路径
# 匹配原生?s=关键词格式的搜索请求,跳转到/search/关键词路径 if ($query_string ~ "^s=([^&]+)(&.*)?$") { set $search_term $1; set $remaining_args $2; rewrite ^/$ /search/$search_term/?$remaining_args? permanent; }
规则说明:末尾的?用于丢弃原查询串里的s参数,避免参数重复;同时兼容搜索URL后附带其他参数的场景,不会丢失额外参数。
- 新路径回转适配WordPress识别逻辑
# 将/search/路径的请求转换为WordPress可识别的搜索参数 location ^~ /search/ { rewrite ^/search/([^/]+)/?$ /index.php?s=$1 last; }
生效验证注意事项
- 添加完配置后先执行
nginx -t检查语法正确性,确认无报错后执行nginx -s reload重载Nginx配置 - 提前检查WordPress后台是否存在别名为
search的页面、分类或自定义文章类型,避免路由冲突 - 如果站点开启了页面缓存、CDN缓存,需要清空缓存后再测试,避免旧缓存规则干扰
原有错误规则的问题点:
- 正则匹配
$query_string时多余添加\?前缀,导致匹配逻辑完全失效- 缺少/search路径到WordPress原生搜索参数的回转规则,跳转后无法正常加载搜索结果
- 未处理多参数场景,搜索URL带其他附加参数时会出现参数丢失问题
内容的提问来源于stack exchange,提问作者Chathuranga
相关产品推荐
相关产品推荐

