在 Laravel 应用程序上使用 AWS 托管的默认“/”以外的所有路由都出现 404 错误(路由在本地环境中工作)

Posted

技术标签:

【中文标题】在 Laravel 应用程序上使用 AWS 托管的默认“/”以外的所有路由都出现 404 错误(路由在本地环境中工作)【英文标题】:404 error on all routes except default "/" using AWS hosting on a Laravel app (routes work in local environment) 【发布时间】:2021-09-13 10:32:56 【问题描述】:

我创建了一个新的 Laravel 应用程序并通过 AWS 部署它。它已成功上传,但是在尝试访问任何其他路由时显示 404 not found (nginx/1.20.0) 错误。

上传应用的步骤:

    压缩包含 Laravel 应用程序的文件夹中的所有项目(称为 Archive.zip) 打开文件夹内的终端并运行 zip -d Archive.zip __MACOSX/* 使用 Elastic Beanstalk 上传和部署整个 zip 文件

运行 php artisan route:list 显示该路由确实存在:

我可以使用http://127.0.0.1:8000/original 在本地访问该页面。但是,部署后我无法访问此页面。

web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\StaticController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () 
    return view('welcome');
);

Route::get('/original', [StaticController::class, 'goToOriginalPage'])->name('original');

welcome.blade.php

<!DOCTYPE html>
<html lang=" str_replace('_', '-', app()->getLocale()) ">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Hello</title>

        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">

        <!-- Styles -->
        <style>
            /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */htmlline-height:1.15;-webkit-text-size-adjust:100%bodymargin:0abackground-color:transparent[hidden]display:nonehtmlfont-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5*,:after,:beforebox-sizing:border-box;border:0 solid #e2e8f0acolor:inherit;text-decoration:inheritsvg,videodisplay:block;vertical-align:middlevideomax-width:100%;height:auto.bg-white--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity)).bg-gray-100--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity)).border-gray-200--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity)).border-tborder-top-width:1px.flexdisplay:flex.griddisplay:grid.hiddendisplay:none.items-centeralign-items:center.justify-centerjustify-content:center.font-semiboldfont-weight:600.h-5height:1.25rem.h-8height:2rem.h-16height:4rem.text-smfont-size:.875rem.text-lgfont-size:1.125rem.leading-7line-height:1.75rem.mx-automargin-left:auto;margin-right:auto.ml-1margin-left:.25rem.mt-2margin-top:.5rem.mr-2margin-right:.5rem.ml-2margin-left:.5rem.mt-4margin-top:1rem.ml-4margin-left:1rem.mt-8margin-top:2rem.ml-12margin-left:3rem.-mt-pxmargin-top:-1px.max-w-6xlmax-width:72rem.min-h-screenmin-height:100vh.overflow-hiddenoverflow:hidden.p-6padding:1.5rem.py-4padding-top:1rem;padding-bottom:1rem.px-6padding-left:1.5rem;padding-right:1.5rem.pt-8padding-top:2rem.fixedposition:fixed.relativeposition:relative.top-0top:0.right-0right:0.shadowbox-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06).text-centertext-align:center.text-gray-200--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity)).text-gray-300--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity)).text-gray-400--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity)).text-gray-500--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity)).text-gray-600--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity)).text-gray-700--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity)).text-gray-900--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity)).underlinetext-decoration:underline.antialiased-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale.w-5width:1.25rem.w-8width:2rem.w-autowidth:auto.grid-cols-1grid-template-columns:repeat(1,minmax(0,1fr))@media (min-width:640px).sm\:rounded-lgborder-radius:.5rem.sm\:blockdisplay:block.sm\:items-centeralign-items:center.sm\:justify-startjustify-content:flex-start.sm\:justify-betweenjustify-content:space-between.sm\:h-20height:5rem.sm\:ml-0margin-left:0.sm\:px-6padding-left:1.5rem;padding-right:1.5rem.sm\:pt-0padding-top:0.sm\:text-lefttext-align:left.sm\:text-righttext-align:right@media (min-width:768px).md\:border-t-0border-top-width:0.md\:border-lborder-left-width:1px.md\:grid-cols-2grid-template-columns:repeat(2,minmax(0,1fr))@media (min-width:1024px).lg\:px-8padding-left:2rem;padding-right:2rem@media (prefers-color-scheme:dark).dark\:bg-gray-800--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity)).dark\:bg-gray-900--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity)).dark\:border-gray-700--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity)).dark\:text-white--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity)).dark\:text-gray-400--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))
        </style>

        <style>
            body 
                font-family: 'Nunito', sans-serif;
            
        </style>
    </head>
    <body class="antialiased">
        <div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
            <h1>Welcome</h1>
            <hr>
            <a href="original">OG page</a>
        </div>
    </body>
</html>

original.blade.php 看起来一样

StaticController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class StaticController extends Controller

    public function goToOriginalPage() 
        return view('original');
    

【问题讨论】:

你得到了什么错误? 这似乎很常见,这work 适合你吗? 我得到一个 404 not found (nginx/1.20.0) 错误(在控制台 GET xx.com/original404) 恐怕***.com/a/62295665/16174785 没有帮助解决问题 你必须向我们展示你的 nginx 配置,在这种情况下你的视图无关 【参考方案1】:

这个问题是由于 Elastic beanstalk 中的 Nginx 配置错误导致的。早期版本的 Amazon Linux 2 使用 apache,但现在默认配置已更改为 Nginx,因此您必须配置 Nginx 以进行重定向

为此在根项目(项目的主要位置)内创建一些子文件夹和一个文件

创建 .platform/nginx/conf.d/elasticbeanstalk/laravel.conf 文件并将以下代码添加到 laravel.conf 中

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

“确保 document_root 位于 /public”

然后部署代码!!!

【讨论】:

以上是关于在 Laravel 应用程序上使用 AWS 托管的默认“/”以外的所有路由都出现 404 错误(路由在本地环境中工作)的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 预计托管在 AWS 上?

如何在 AWS AutoScaling 中添加 Laravel 环境文件

在 AWS Serverless 平台上部署 Laravel (laravel-mix) 应用程序

在共享主机上托管时如何解决 laravel 的图像上传问题?

AWS EB:WebSocket 握手期间出错:意外响应代码:400

使用 aws fargate 有啥缺点(缺点)以及为啥我的 laravel 应用程序在 Fargate 与弹性 beantalk 上运行缓慢?