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

Nginx多目录配置简化:正则捕获路径变量的可行性问询

Nginx子目录配置简化方案

你之前的正则配置没生效,核心问题是没给location加上正则匹配标识——Nginx要求正则location必须以~(区分大小写)或~*(不区分大小写)开头,否则会被当成普通前缀location处理,根本不会按正则规则捕获路径。

下面提供两种可行的简化方案,无需逐个指定子目录:

方案一:合并正则location(匹配任意深度子目录)

location / {
    try_files $uri $uri/ /index.php?$args;
}

# 匹配任意层级的子目录应用,自动转发到对应目录的index.php
location ~ ^(/(?:[^/]+/)+) {
    try_files $uri $uri/ $1index.php?$args;
}

这个正则^(/(?:[^/]+/)+)会捕获所有包含至少一级子目录的路径(比如/a-random-website/、/something/wordpress/),$1就是捕获到的完整目录路径,当请求的文件/目录不存在时,自动转发到该目录下的index.php。

方案二:用rewrite规则统一处理(更简洁)

location / {
    try_files $uri $uri/ @rewrite;
}

location @rewrite {
    # 提取请求的父目录,转发到对应index.php
    rewrite ^(/.*)/[^/]+$ $1/index.php?$args last;
    # 根目录请求直接转发到根index.php
    rewrite ^/$ /index.php?$args last;
}

先尝试访问文件或目录,不存在则跳转到@rewrite命名location,通过rewrite自动提取当前请求的父目录路径,转发到对应目录的index.php,完全无需逐个配置子目录。

注意事项

  • 如果有个别子目录不需要这个规则,可以在前面加^~前缀的location排除,比如location ^~ /no-rewrite/ { ... },这类前缀location优先级高于正则location。
  • 修改配置后,记得用nginx -t验证语法,再重启Nginx生效。

内容的提问来源于stack exchange,提问作者coldpumpkin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:55:27