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

如何在AWS Elastic Beanstalk部署CodeIgniter?部署后403/404错误求助

解决AWS Elastic Beanstalk上CodeIgniter的403/404问题

嘿,刚上手Elastic Beanstalk就碰到这种访问错误确实头疼,结合你说的情况(本地和其他Linux服务器正常、控制器首字母已大写),我给你梳理几个最可能的原因和解决办法:

先搞定403 Forbidden(根路径访问失败)

这个问题大概率是文档根目录配置不对或者权限不足:

1. 调整EB的文档根目录指向CodeIgniter的public文件夹

CodeIgniter的入口文件是public/index.php,但Elastic Beanstalk默认会把项目根目录设为文档根,导致apache找不到可访问的入口文件,就会返回403。你需要通过.ebextensions配置文件修改这个设置:

在项目根目录创建.ebextensions/01_set_document_root.config,内容如下:

files:
  "/etc/httpd/conf.d/elasticbeanstalk.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      <VirtualHost *:80>
        DocumentRoot /var/www/html/public
        <Directory /var/www/html/public>
          Options FollowSymLinks Indexes
          AllowOverride All
          Require all granted
        </Directory>
        ErrorLog /var/log/httpd/elasticbeanstalk-error_log
      </VirtualHost>

(注:如果是Amazon Linux 2的EB环境,这个路径和配置是适用的;如果是旧版Amazon Linux,路径可能略有不同,但核心是把DocumentRoot指向public)

2. 修复文件权限

EB部署后,EC2实例上的文件权限可能不是apache用户(通常是apache或www-data)可读写的,导致无法访问。同样在.ebextensions里加权限配置:

创建.ebextensions/02_set_permissions.config:

container_commands:
  01_set_apache_permissions:
    command: "chown -R apache:apache /var/www/html && chmod -R 755 /var/www/html/public"

再解决404 Not Found(/login路径失败)

这个问题和你的.htaccess配置、CodeIgniter的系统设置密切相关:

1. 修正.htaccess的Rewrite规则

你贴的.htaccess不完整,而且RewriteBase /sample是本地WAMP的子目录配置,在EB上你的环境是独立域名,根路径就是/,所以要调整成CodeIgniter标准的rewrite规则:

把项目根目录(或者public文件夹里,看你把.htaccess放哪)的.htaccess改成:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    Options +Indexes
    RewriteEngine On
    RewriteBase /
    # 忽略实际存在的文件和目录
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # 把所有请求转发到index.php
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

2. 确保EB启用了mod_rewrite模块

默认情况下EB的apache可能没开rewrite模块,需要手动启用。在.ebextensions里加配置:

创建.ebextensions/03_enable_rewrite.config:

files:
  "/etc/httpd/conf.d/rewrite.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule rewrite_module modules/mod_rewrite.so

3. 检查CodeIgniter的config.php配置

打开application/config/config.php,确认这几个关键配置:

  • $config['base_url']:设置成你的EB域名,比如https://sample.elasticbeanstalk.com/(注意末尾的斜杠)
  • $config['index_page']:设为空字符串'',这样rewrite规则才能去掉index.php
  • $config['uri_protocol']:推荐设为'REQUEST_URI',确保路由解析正常

4. 最后确认控制器和方法

虽然你说控制器首字母大写了,但再检查一遍:

  • 控制器文件必须是Login.php(首字母大写)
  • 文件里的类名必须是class Login extends CI_Controller(和文件名一致,首字母大写)
  • 如果访问/login,控制器里必须有index()方法;如果是访问特定方法,比如/login/do_login,那要有do_login()方法

把这些配置都调整好后,重新部署你的应用到EB,应该就能解决这两个错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:03:32