Laravel 任何新路线突然停止工作,即使没有任何改变

Laravel any new routes suddenly stop working even though nothing has changed

我过去在 Laravel 路由方面遇到过一些奇怪的问题,但是通常可以通过某种形式的逻辑解决方案来解决这些问题,例如。清除路由缓存,或真正的用户错误...

但这一个很奇怪。我已经开发这个网站几个星期了,使用 /admin 路由也有一段时间了,但今天任何与 /admin 或登录相关的东西都会导致 404 |未从 Laravel 中找到。现在甚至添加任何新路线都不起作用,包括非常基本的路线。

例如。主页路由如下:

Route::get('/', [App\Http\Controllers\FrontendController::class, 'home'])->name('home');

但添加:

Route::get('/test', [App\Http\Controllers\FrontendController::class, 'home'])->name('test');

我的 web.php 路线也将我带到 404。

只是为了解释我的开发环境,我在 Windows 上,我尝试用“php artisan serve”和 XAMPP 来提供它,但两者都是给我同样的问题。我不会费心解释 XAMPP 设置,因为这实际上是昨天的工作并且没有任何改变,但是使用 php artisan serve 它将我带到“http://127.0.0.1:8000/ “.. 这不需要任何特殊的黑客攻击.. 它通常可以正常工作。

我今天做了哪些不同的事情?

所以我今天所做的就是:

  1. 添加了一个带有“php artisan make:command SomeCommandIStartedMaking”的新命令

这肯定没有搞砸什么?我什至删除了命令并重置为我最后一次提交以防万一,但路由仍然被搞砸了。

  1. 在我的 windows“主机”文件中,我添加了“127.0.0.1 somedomain.com”

所以这听起来像是对路由有影响的事情,这是我第一次注意到这个问题的地方..但是从那时起我有了“ipconfig /flushdns”,我已经从我的主机中删除了条目文件,我已经清除了我的 laravel 路由和缓存,但问题仍然存在。

我真的被困在这个问题上了。也终于!我已经完成了 route:list,我可以清楚地看到路线按预期显示,但我可以向你保证,自昨天以来没有任何变化,所以这似乎是另一个问题。

这里是 web.php 的转储,因为我知道这将被要求:

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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!
|
*/

// Frontend
Route::get('/', [App\Http\Controllers\FrontendController::class, 'home'])->name('home');
Route::get('/instagram-gallery', [App\Http\Controllers\FrontendController::class, 'instagramGallery'])->name('instagram-gallery');
Route::get('/{pageAlias}', [App\Http\Controllers\PageController::class, 'index'])->name('page');

Route::post('/contact-send', [App\Http\Controllers\PageController::class, 'contactSend'])->name('contact-send');

Route::get('/test', [App\Http\Controllers\FrontendController::class, 'home'])->name('test');

// Admin
Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'is_admin']], function(){
    Route::get('/',                         [App\Http\Controllers\AdminController::class, 'index'])->name('admin');
    Route::get('/search/{table}',           [App\Http\Controllers\AdminController::class, 'search'])->name("admin-search");
    Route::get('/browse/{table}',           [App\Http\Controllers\AdminController::class, 'browse'])->name("admin-browse");
    Route::get('/create/{table}',           [App\Http\Controllers\AdminController::class, 'create'])->name("admin-create");
    Route::get('/edit/{table}/{id}',        [App\Http\Controllers\AdminController::class, 'edit'])->name("admin-edit");
    Route::get('/manage-account',           [App\Http\Controllers\AdminController::class, 'manageAccount'])->name("admin-manage-account");
    Route::get('/documentation/{subject?}', [App\Http\Controllers\AdminController::class, 'documentation'])->name("admin-documentation");
    
    Route::post('/create/{table}/action',   [App\Http\Controllers\AdminController::class, 'createAction'])->name("admin-create-action");
    Route::post('/edit/{table}/{id}/action',[App\Http\Controllers\AdminController::class, 'editAction'])->name("admin-edit-action");
    Route::post('/delete',                  [App\Http\Controllers\AdminController::class, 'deleteAction'])->name("admin-delete-action");
    Route::post('/wysiwyg-upload',          [App\Http\Controllers\AdminController::class, 'wysiwygUpload'])->name("wysiwyg-upload");
    Route::post('/manage-account-action',   [App\Http\Controllers\AdminController::class, 'manageAccountAction'])->name("admin-manage-account-action");
});

require __DIR__.'/auth.php';

要补充的一件事是,“/contact”解析得很好,它使用如上所示的“/{pageAlias}”路由,所以有些可以工作,有些不能。我应该如何解决这个问题我什至不知道从哪里开始:(

任何帮助都会很热!这太令人沮丧了哈哈!提前致谢..

问题在于您的路线顺序 - 代码将 运行 逐行尝试找到匹配的路线。

一旦命中

Route::get('/{pageAlias}', [App\Http\Controllers\PageController::class, 'index'])->name('page');

它将匹配 /test 并自然停止 - 永远不会到达您的下一条路线。

要解决这个问题,您需要在通用“包罗万象”的路线 /{pageAlias}

之前定义您的特定路线 /test

这可能是由于缓存,所以运行遵循命令

php aritsan config:clear
php artisan route:clear

要使用单个命令:

PHP artisan optimize