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

如何配置Nginx使CodeIgniter 4通过Drupal域名子路径正常服务

解决CodeIgniter 4在Elastic Beanstalk Nginx环境下的PATH前缀转发问题

针对CloudFront转发https://DRUPAL.com/PATH请求到CodeIgniter应用后,路由和静态资源无法正常工作的问题,通过自定义Nginx配置去掉PATH前缀,让应用像访问原域名一样处理请求。

步骤1:创建Elastic Beanstalk自定义Nginx配置

在CodeIgniter项目根目录下新建.ebextensions文件夹,添加配置文件01-nginx-rewrite.conf,内容根据你的EB PHP环境选择对应版本:

版本1:适用于反向代理转发后端服务的场景

files:
  "/etc/nginx/conf.d/ci-path-rewrite.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      # 匹配所有/PATH开头的请求,优先处理静态文件
      location ^~ /PATH/ {
          try_files $uri $uri/ @ci-rewrite;
      }

      # 重写规则:去掉/PATH前缀后转发给CodeIgniter
      location @ci-rewrite {
          rewrite ^/PATH/(.*)$ /$1 break;
          proxy_pass http://127.0.0.1:8080; # 替换为你的CodeIgniter监听端口,EB默认PHP环境通常为8080
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
      }

      # 直接处理public目录下的静态资源,设置缓存
      location ~* ^/PATH/public/(css|js|images|fonts)/ {
          rewrite ^/PATH/(public/.*)$ /$1 break;
          root /var/app/current; # EB默认项目根目录,若有修改请调整
          expires 1y;
          add_header Cache-Control "public, immutable";
      }

版本2:适用于PHP-FPM直接处理的场景(EB PHP标准环境)

files:
  "/etc/nginx/conf.d/ci-path-rewrite.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      # 匹配/PATH开头的请求,引导到index.php
      location ^~ /PATH/ {
          try_files $uri $uri/ /PATH/index.php$is_args$args;
      }

      # 处理PHP请求,去掉/PATH前缀后传递给PHP-FPM
      location ~ ^/PATH/index.php {
          rewrite ^/PATH/(index.php.*)$ /$1 break;
          fastcgi_pass unix:/var/run/php-fpm/www.sock; # 确认EB的PHP-FPM sock路径,不同版本可能不同
          fastcgi_index index.php;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          include fastcgi_params;
          # 传递正确的URI给CodeIgniter路由
          fastcgi_param REQUEST_URI $uri;
          fastcgi_param PATH_INFO $uri;
      }

      # 直接返回public目录静态资源
      location ~* ^/PATH/public/(css|js|images|fonts)/ {
          rewrite ^/PATH/(public/.*)$ /$1 break;
          root /var/app/current;
          expires 1y;
          add_header Cache-Control "public, immutable";
      }

注意:若不确定PHP-FPM的sock路径,可登录EB实例执行ls /var/run/php-fpm/查看,常见路径还有/var/run/php-fpm/php-fpm.sock。

步骤2:调整CodeIgniter配置

修改app/Config/App.php中的关键配置:

public $baseURL = 'https://DRUPAL.com/PATH/';
public $indexPage = '';
public $uriProtocol = 'REQUEST_URI';

步骤3:部署测试

将包含.ebextensions文件夹的项目重新打包,上传到Elastic Beanstalk部署。测试以下场景:

  • 访问https://DRUPAL.com/PATH/确认首页正常加载
  • 访问子路由如https://DRUPAL.com/PATH/controller/method确认路由生效
  • 检查静态资源如https://DRUPAL.com/PATH/public/css/style.css是否能正确加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:43:21