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

Nginx配置问题:隐藏URL子目录,实现根路径直接服务应用

Nginx配置问题:隐藏URL中的子目录路径

我正在配置Nginx,希望让应用在URL中不暴露子目录。应用文件存储在/var/app/current/ddformbuilder/目录下,想要实现用https://app.example.com/login.php替代https://app.example.com/ddformbuilder/login.php访问。

当前配置

files:
  "/etc/nginx/conf.d/01_custom.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      server {
        listen 80;
        server_name app.example.com;

        root /var/app/current/ddformbuilder/;

        index index.php;

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

        location ~ \.php$ {
          include /etc/nginx/fastcgi_params;
          fastcgi_pass unix:/run/php-fpm/www.sock;
          fastcgi_index index.php;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param DOCUMENT_ROOT /var/app/current/ddformbuilder;
        }
      }

问题现象

用上述配置后,URL依然会显示子目录ddformbuilder。访问https://app.example.com/login.php会提示“File not found”错误,但访问https://app.example.com/ddformbuilder/login.php可以正常运行。

我的需求是:让根域名https://app.example.com直接从/var/app/current/ddformbuilder/提供文件服务,且URL中不显示ddformbuilder。

已尝试的操作

  • 调整root指令和try_files设置
  • 测试location块的不同配置
  • 修改Nginx配置并重新加载(已用sudo nginx -t确认配置合法)

修复后的配置

问题出在location /块里错误覆盖了root指令,导致Nginx去/ddformbuilder目录找文件,而非正确的/var/app/current/ddformbuilder/。同时优化PHP处理逻辑,确保路径映射正确:

files:
  "/etc/nginx/conf.d/01_custom.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      server {
        listen 80;
        server_name app.example.com;

        # 全局指定应用所在的根目录
        root /var/app/current/ddformbuilder;
        index index.php;

        location / {
          # 移除错误的root指令,继承server块的根目录配置
          try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
          include /etc/nginx/fastcgi_params;
          fastcgi_pass unix:/run/php-fpm/www.sock;
          fastcgi_index index.php;
          # 利用全局root自动拼接正确的文件路径
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
      }

配置说明

  1. 删除location /中的root指令:server块已经设置了正确的根目录,location内的root /ddformbuilder会覆盖全局配置,导致路径错误,直接移除即可。
  2. 简化PHP参数:$document_root会自动继承server块的root值,SCRIPT_FILENAME会正确拼接成/var/app/current/ddformbuilder/login.php,无需额外指定DOCUMENT_ROOT。
  3. 生效配置:执行sudo nginx -t验证配置合法后,运行sudo systemctl reload nginx重载Nginx即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:16:11