You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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后缀即可

温馨提示

  1. 修改配置前记得先备份原文件,改完后用nginx -t命令检查配置是否合法,避免服务出错
  2. 如果你的页面名称包含特殊字符,可能需要微调正则表达式,但一般字母、数字、下划线这类常规字符都能正常匹配
  3. 记得把之前那条固定跳转test.php的旧规则删掉,避免规则冲突

这样一条规则就能覆盖所有页面,再也不用写100条重复规则啦~

备注:内容来源于stack exchange,提问作者Tejas Bhosale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:04:30