Laravel 弹性 BeanStalk 上的 404

404 on Laravel Elastic BeanStalk

我正在尝试将 Laravel 7 应用程序部署到 Elastic BeanStalk,但遇到了一些路由问题。

我已经按照下面视频中的教程进行操作,并上传了包含我所有本地文件的 zip 存档。 在将根目录设置为 /public 后,我还修复了权限问题。 目前,唯一可见的页面是主页,而其他页面如 /login、/register 和其他页面显示 404

这是来自 eb 的日志:

2020/05/01 14:19:30 [error] 4091#0: *4 open() "/var/www/html/public/login" failed (2: No such file or directory), client: 82.4.194.3 , 服务器: , 请求: "GET /login HTTP/1.1"

https://www.youtube.com/watch?v=ISVaMijczKc

经过几次尝试,我搞定了运行。我删除了该应用程序并使用 EB CLI 重新创建它。

我创建了一个环境配置并将其放在 .ebextentions 中并添加了 AllowOverride All

这是我的内容01-environment.config

option_settings:
 aws:elasticbeanstalk:container:php:phpini:
   document_root: /public
   composer_options: --no-dev
 aws:elasticbeanstalk:application:environment:
   APP_ENV: production
   APP_KEY: base64:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

和我的 .htaccess 文件

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]
    AllowOverride All
    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

我想您正在使用 Beanstalk PHP 平台和版本 2 中的 Linux;此版本使用 Nginx(而之前的版本使用 Apache)。

您可以在官方文档中查看更多详细信息:https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP

在这种情况下,您必须按照 Laravel 文档中的描述配置 Nginx 以进行重定向:https://laravel.com/docs/7.x/deployment#nginx

只需创建文件 .platform/nginx/conf.d/elasticbeanstalk/laravel.conf(在项目的根目录):

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

您可以根据需要随意添加其他配置。

您将在此处找到有关扩展平台的更多详细信息:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html