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

Nginx访问真实目录路径时如何正确获取REQUEST_URI值

问题根因

当前配置中try_files $uri $uri/ /index.php?$query_string;规则按从左到右的优先级执行:

  1. 首先检查请求路径是否对应服务器上存在的文件,存在则直接返回文件
  2. 其次检查请求路径是否对应服务器上存在的目录(即$uri/项的作用),匹配到目录时Nginx会直接在目录内查找index指令定义的默认首页:目录下有首页文件则直接返回首页,无首页时开了autoindex on就展示目录列表,关了autoindex就返回403错误
  3. 前两项都匹配失败时,才会把请求转发到index.php入口文件

访问真实存在的目录时,规则在第二步就被拦截,根本不会执行到转发到入口文件的逻辑,因此PHP代码无法拿到对应路径的REQUEST_URI值。

配置修改方案

你只需要调整两处配置文件中location /块下的try_files规则,删除规则中的$uri/项即可,修改后Nginx将不再主动匹配真实存在的目录,所有非实体文件的请求(包括目录请求、不存在的路径请求)都会统一转发到index.php入口。

1. 修改C:/nginx路径下的nginx.conf

找到对应server块内的location /配置,修改为:

location / {
   # 删掉了原规则中的$uri/项
   try_files $uri /index.php?$query_string;
}

其余配置(PHP解析、根目录、域名等)保持不变即可。

2. 修改OpenServer目录下的nginx.conf

找到对应server块内的location /配置,修改为:

location / {
    # 删掉了原规则中的$uri/项
    try_files $uri /index.php?$query_string;

    location ~ \.php$ {
        try_files      $fastcgi_script_name =404;
        fastcgi_pass   backend;
        include        '%sprogdir%/userdata/config/nginx_fastcgi_params.txt';
    }
}

其余配置保持不变。

生效操作
  • 独立Nginx环境执行命令nginx -s reload重载配置即可生效
  • OpenServer环境直接在面板重启Nginx服务即可生效
效果验证

修改完成后访问mysite/folder1、mysite/folder2这类真实目录路径时,请求会被正确转发到index.php,$_SERVER['REQUEST_URI']可以完整获取到原始请求路径,不会再出现目录列表或403错误。同时真实存在的静态资源(css、js、图片、实体PHP文件等)仍可正常直接访问,不影响原有静态资源加载逻辑。

如果你不需要让实体静态文件被直接访问,想要所有请求100%走index.php,可把try_files规则直接简化为try_files /index.php?$query_string;即可。

注意:修改后访问不带末尾斜杠的真实目录路径时,Nginx默认会返回301重定向补全末尾斜杠,该行为属于Nginx默认目录规范逻辑,不影响REQUEST_URI获取,如无特殊需求无需额外调整。

内容的提问来源于stack exchange,提问作者Константин Сурков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:51:24