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

Nginx配置问题:访问/php子目录跳转至CodeIgniter主站

Nginx配置两个PHP站点的重定向问题解决

问题场景

需要部署两个PHP站点:

  • CodeIgniter框架应用,实际路径为/var/www/html/code
  • 简单PHP脚本应用,实际路径为/var/www/html/php/app,通过https://example.com/php/访问

当前Nginx配置存在问题:访问https://example.com/php/some_sub_directory时,会被重定向到CodeIgniter主应用的根路径https://example.com/。

当前配置如下:

server {
       listen 443 ssl;
       listen [::]:443 ssl;

        client_max_body_size 20M;
        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;
        root /var/www/html/code;
        server_name example.com;
        ssl_certificate /etc/nginx/ssl/cert.crt;
        ssl_certificate_key /etc/nginx/ssl/cert.key;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;


        }
#codeigniter

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

#simple php application

               location ^~ /php {
                index index.php;
                alias /var/www/html/php/app;
               try_files $uri $uri/ /index.php?$query_string ;
      location ~ \.php$ {
                fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
                include        fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME $request_filename;

        }
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
                fastcgi_read_timeout 300;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 256 4k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_temp_file_write_size 256k;

        }

}

问题原因

  1. location ^~ /php中的try_files最后一项/index.php?$query_string是绝对路径,会匹配到根目录(/var/www/html/code)下的index.php,直接跳转到CodeIgniter主应用入口。
  2. 原配置存在语法错误(server块内多了一个闭合大括号),可能导致Nginx解析逻辑异常。
  3. 嵌套的PHP location未适配alias路径的脚本解析逻辑。

修复后的配置

server {
       listen 443 ssl;
       listen [::]:443 ssl;

       client_max_body_size 20M;
       index index.php index.html index.htm index.nginx-debian.html;
       root /var/www/html/code;
       server_name example.com;
       ssl_certificate /etc/nginx/ssl/cert.crt;
       ssl_certificate_key /etc/nginx/ssl/cert.key;
       access_log /var/log/nginx/access.log;
       error_log /var/log/nginx/error.log;

       # CodeIgniter 主应用
       location / {
             try_files $uri $uri/ /index.php?$uri&$args;
       }

       # 简单PHP应用(/php路径映射到/var/www/html/php/app)
       location ^~ /php {
               index index.php;
               alias /var/www/html/php/app;
               # 修正try_files路径,指向当前location下的index.php
               try_files $uri $uri/ /php/index.php?$query_string;

               location ~ \.php$ {
                       fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
                       include fastcgi_params;
                       # 适配alias路径,确保脚本路径正确
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       fastcgi_index index.php;
               }
       }

       # 全局PHP处理(仅处理主应用的PHP文件)
       location ~ \.php$ {
               try_files $uri =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
               fastcgi_read_timeout 300;
               fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;
               fastcgi_buffer_size 128k;
               fastcgi_buffers 256 4k;
               fastcgi_busy_buffers_size 256k;
               fastcgi_temp_file_write_size 256k;
       }
}

关键修改说明

  • 修正try_files跳转路径:将/index.php?$query_string改为/php/index.php?$query_string,确保不存在的目录/文件请求转发到PHP子应用的入口,而非主应用根目录。
  • 修复语法错误:删除server块内多余的闭合大括号,保证配置解析正常。
  • 完善嵌套PHP配置:在/php的PHP location中添加fastcgi_index index.php,确保目录访问能正确解析到入口脚本。

验证步骤

  1. 检查配置语法:nginx -t
  2. 重新加载Nginx:systemctl reload nginx
  3. 访问https://example.com/php/some_sub_directory,验证是否由PHP子应用处理,而非跳转至主应用根目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:05:45