Nginx多URL动态Rewrite规则配置求助
Nginx多URL动态Rewrite规则配置求助
你好呀!我完全get到你的需求了——现在你写的规则会把所有/abc/xyz/xxx/格式的请求都统一转到test.php,但你想要实现动态匹配:比如/abc/xyz/test2/自动对应test2.php,/abc/xyz/test3/对应test3.php,不想一个个写100条重复规则对吧?
其实只需要调整Rewrite的正则表达式,把URL里的动态页面名捕获下来,再替换到目标路径里就行,给你两个实用方案:
方案一:精准匹配单级动态路径
如果你的URL结构固定是/abc/xyz/[页面名]/这种单层级(也就是[页面名]后面没有更多子路径),用这个规则最稳妥:
location ~* ^/abc/xyz/([^/]+)/$ { rewrite ^/abc/xyz/([^/]+)/$ /abc/xyz/$1.php last; }
规则说明:
([^/]+):这是正则捕获组,专门匹配/abc/xyz/后面、最后一个/前面的所有非/字符,也就是你的页面名称(比如test、test2、test3)$1:引用上面捕获到的内容,把它直接替换到目标路径里,完美实现动态对应
方案二:支持多级子路径的灵活匹配(可选)
如果偶尔需要处理更深层级的路径,比如/abc/xyz/test/sub/想转到/abc/xyz/test/sub.php,可以用这个更通用的规则:
location ~* ^/abc/xyz/.+/ { rewrite ^(/abc/xyz/.+)/$ $1.php last; }
规则说明:
/.+/:匹配/abc/xyz/后面的任意非空路径(包含多级子目录)$1:捕获/abc/xyz/到最后一个/之前的整个路径部分,直接加上.php后缀即可
温馨提示
- 修改配置前记得先备份原文件,改完后用
nginx -t命令检查配置是否合法,避免服务出错 - 如果你的页面名称包含特殊字符,可能需要微调正则表达式,但一般字母、数字、下划线这类常规字符都能正常匹配
- 记得把之前那条固定跳转
test.php的旧规则删掉,避免规则冲突
这样一条规则就能覆盖所有页面,再也不用写100条重复规则啦~
备注:内容来源于stack exchange,提问作者Tejas Bhosale
相关产品推荐
相关产品推荐

