在 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 错误(路由在本地环境中工作)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AWS AutoScaling 中添加 Laravel 环境文件
在 AWS Serverless 平台上部署 Laravel (laravel-mix) 应用程序
在共享主机上托管时如何解决 laravel 的图像上传问题?
AWS EB:WebSocket 握手期间出错:意外响应代码:400
使用 aws fargate 有啥缺点(缺点)以及为啥我的 laravel 应用程序在 Fargate 与弹性 beantalk 上运行缓慢?