Nginx中含/page/的分页URL不存在时301重定向配置需求
Nginx实现含/page/的URL不存在时301重定向到无/page/版本
要实现你需求的功能,仅用try_files无法单独完成,需要结合Nginx的正则匹配、命名location和rewrite指令,以下是具体配置方案:
核心配置
在你的Nginx server块中添加如下配置:
server { listen 80; server_name example.com; root /path/to/your/site; # 匹配所有包含/page/的请求 location ~* /page/ { # 先尝试访问请求的文件或目录,不存在则跳转到命名location try_files $uri $uri/ @redirect_without_page; } # 处理重定向的命名location location @redirect_without_page { # 正则捕获/page/之前的路径,重定向到该路径(301永久重定向) rewrite ^(.*)/page/.*$ $1/ permanent; } # 其他站点基础配置(比如静态文件处理、PHP解析等) }
配置说明
location ~* /page/:使用不区分大小写的正则匹配,覆盖所有包含/page/的URL请求try_files $uri $uri/ @redirect_without_page:优先检查当前请求的URI对应的文件或目录是否存在,若存在则直接返回资源;若不存在,触发命名location@redirect_without_pagerewrite ^(.*)/page/.*$ $1/ permanent:通过正则捕获/page/之前的全部路径内容,将请求301重定向到该路径。permanent表示永久重定向,符合SEO优化需求
效果验证
- 当访问
example.com/x-y-z/page/186/且该路径无对应资源时,会自动301重定向到example.com/x-y-z/ - 当访问
example.com/page/2020/且该路径无对应资源时,会自动301重定向到example.com/
注意事项
- 如果你的站点存在真实的
/page/路径资源,该配置不会影响正常访问,因为try_files会优先返回存在的资源 - 若你有其他更具体的location规则,需确保这个匹配
/page/的location优先级正确(正则匹配的优先级高于普通前缀匹配) - 301重定向会被浏览器缓存,测试时建议使用无痕浏览窗口或清除浏览器缓存
内容的提问来源于stack exchange,提问作者Doraemon
相关产品推荐
相关产品推荐

