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

Laravel部署AWS Elastic Beanstalk报错:无法访问根目录

解决方案:Laravel部署AWS Elastic Beanstalk的403权限错误

让我帮你梳理一下问题根源和对应的解决步骤:

问题核心原因

你的错误日志明确指出Apache找不到/var/www/html/public/下的索引文件,同时目录索引被禁止。这是因为你把Laravel的index.php和.htaccess移到了项目根目录,但Elastic Beanstalk的配置里依然把文档根目录指向了/public,两者完全不匹配,导致Apache找不到入口文件,触发了权限错误。

分步解决方案

1. 修正文档根目录配置

打开你的.ebextensions/02-project.config,找到document_root的配置项,把它从/public改成项目根目录(也就是/),因为EB会把你的代码部署到/var/app/current,设置为/就会指向这个根目录:

- namespace: aws:elasticbeanstalk:container:php:phpini
  option_name: document_root
  value: /

2. 统一容器命令的工作目录

检查你的.ebextensions/01-main.config,部分容器命令没有指定工作目录cwd,这可能导致命令在错误的路径执行。建议给所有容器命令加上cwd: "/var/app/ondeck"(EB部署过程中临时存放代码的路径):

container_commands:
  01-optimize:
    command: "/usr/bin/composer.phar dump-autoload --optimize"
    cwd: "/var/app/ondeck"
  02-migrations:
    command: "php artisan migrate --env=production"
    cwd: "/var/app/ondeck"
  03-cache:
    command: "php artisan cache:clear"
    cwd: "/var/app/ondeck"
  04-optimize:
    command: "php artisan optimize --force"
    cwd: "/var/app/ondeck"
  05-permissions:
    command: "chmod 777 -R /var/app/ondeck"
    cwd: "/var/app/ondeck"

3. 确认.htaccess规则有效性

你当前的.htaccess规则是适配根目录的index.php的,这部分不需要修改,但可以确认一下核心规则:

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

这条规则会把所有非文件/非目录的请求转发到根目录的index.php,完全符合你当前的文件结构。

4. 重新部署应用

把修改后的配置文件提交到代码仓库,然后重新部署到Elastic Beanstalk。新的文档根目录配置会生效,Apache就能找到根目录下的index.php,解决403权限错误。

额外建议(可选)

虽然把入口文件移到根目录是可行的,但Laravel官方推荐保留public目录作为文档根目录,这样可以避免暴露.env等敏感文件。如果之后想恢复官方结构,只需要:

  • 把index.php和.htaccess移回项目的public目录
  • 将document_root改回/public即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:27:56