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

Nginx子目录独立根目录配置问题:@ono_php未调用对应PHP location块

Nginx子目录独立PHP环境配置解决方案

问题核心是全局命名location(@ono_php)会脱离/sub2/的上下文,匹配根目录的PHP处理规则,导致路由错误。以下是直接有效的解决配置和原理说明:

正确配置示例

server {
    listen 443 ssl;
    server_name example.com;
    root /var/www/site;

    # 根站点PHP处理规则
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # /sub2/独立配置块
    location /sub2/ {
        alias /var/www/sub2/;
        index index.php index.html;

        # 优先匹配静态文件,不存在则路由到/sub2/index.php
        try_files $uri $uri/ /sub2/index.php$is_args$args;

        # /sub2/专属PHP处理规则(嵌套location仅作用于当前上下文)
        location ~ \.php$ {
            fastcgi_pass unix:/run/php/php8.1-fpm.sock;
            fastcgi_index index.php;
            # 因使用alias,必须用$request_filename获取真实文件路径
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
        }
    }
}

关键要点说明

  1. 避免全局命名location:@ono_php是全局级别的规则,调用时会跳出/sub2/的上下文,导致匹配根目录的PHP块。改用try_files直接在/sub2/内部处理路由,无需依赖全局命名location。
  2. 嵌套location的作用域:嵌套在location /sub2/内的~ \.php$块仅处理/sub2/路径下的PHP请求,不会和根站点的PHP规则冲突。
  3. alias路径修正:使用alias时,不能用$document_root$fastcgi_script_name拼接文件路径,必须用$request_filename才能正确指向/var/www/sub2/下的文件(Nginx会自动根据alias规则解析真实路径)。

验证方法

访问https://example.com/sub2/contact时,Nginx会先检查是否存在/var/www/sub2/contact静态文件,不存在则重写到/var/www/sub2/index.php,由/sub2/专属的PHP块处理,不会再调用根目录的PHP规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:22