繁体   English   中英

带有子域的 laravel 无效路由操作

[英]laravel invalid route action with subdomain

在路由中添加子域的正确方法是什么? 我有一个 laravel/homestead 项目在我的本地计算机上运行,​​但是当我将它移动到共享主机服务器 HostGator 时,它不再工作。 好吧,主页有效,但指向子页面的链接无效。

例如,以下路线在我的本地版本上运行良好:

Route::get('/appointments', 'AppointmentController@index');

但是如果我在远程服务器上使用该路由,它会将它带到 tekknow.net/appointments 而不是 tekknow.net/medaverter/appointments。

所以我按照这里的说明操作: https : //laravel.com/docs/5.6/routing#route-group-sub-domain-routing并添加了这样的前缀:

Route::prefix('MedAverter')->group(function() {
  Route::get('/appointments', 'AppointmentController@index');
});

但这也行不通。 它也转到 /tekknow.net/appointments

我也尝试将路线更改为:

Route::get('/MedAverter/appointments', 'AppointmentController@index');

但这也去了 tekknow.net/appointments

有谁知道我做错了什么?

编辑:我进入了我的 HostGator cPanel 并查看了我所有的子域,发现我的子域根是 medaverter.tekknow.net,它链接到 medaverter.tekknow.net/MedAverter 的文档根,它被重定向到http://www。 tekknow.net/MedAverter 所以我将我的文件夹从 medaverter 重命名为 MedAverter 以匹配子域重定向。

这是一个屏幕截图,显示了我在 cPanel 中看到的列 Subdomains.Root Domain、Document Root 和 Redirection 在此处输入图片说明

当你尝试php artisan route:list | grep appointments php artisan route:list | grep appointments ,

它打印:

[~/www/MedAverter]# php artisan route:list | grep appointments 

| | GET|HEAD | MedAverter/appointments | | App\Http\Controllers\AppointmentController@index | web | 

这意味着您的路线MedAverter/appointments适用于 laravel。

Error 404表示找不到路由。

所以我认为你的 nginx 配置有问题。

当我尝试http://tekknow.net/MedAverter/MedAverter/appointments 时 它确实找到了错误500的路线。 medaverter-500

所以,我认为你已经在你的 nginx 配置中定义了这段代码:

  location = / {
    rewrite ^ https://tekknow.net/MedAverter;
  }

解决方案1:

改回rewrite ^ https://tekknow.net/; 在nginx配置中。

(我不熟悉hostGatar cPanel,但我认为您可以更改medaverter.tekknow.net/MedAverter重定向http: medaverter.tekknow.net/MedAverter / `)

在你的 Laravel 项目中,你需要保留prefix MedAverterappointments

解决方案2:

保留rewrite代码。 这意味着您不需要更改 cPanel 重定向。

并删除 Laravel 路由中的prefix MedAverter HostGatar(Nginx) 将使用此前缀MedAverter自动重定向appointments

清除所有缓存

您遇到的问题可能是由于缓存。 所以,通过运行确保这不是问题

php artisan route:clear && php artisan view:clear && php artisan config:clear && php artisan cache:clear && php artisan clear-compiled

基本网址

如果您想更改 Laravel 应用程序的基本 URL,这已经是一个问题了

多个路径前缀

在这种情况下,您的路径中有多个具有相同前缀的路由。 如果是这种情况,您可以使用路由组来简化结构。

Route::prefix('medaverter')->group(function () {
    Route::get('/', function () {
        // Path /medaverter
    });
    Route::get('appointments', function () {
        // Path /medaverter/appointments
    });
});

这将分别转到tekknow.net/medavertertekknow.net/medaverter/appointments 您还可以创建另一个前缀,例如testing ,以相同的方式配置并转到tekknow.net/testingtekknow.net/testing/whatever

命名空间前缀

当您按路由前缀对路由进行分组时,它们的控制器可能具有类似的 PHP 命名空间。 在 medaverter 示例中,所有 medaverter 路由的控制器都可能位于 Medaverter 命名空间下。

Route::namespace('Medaverter')->group(function () {
    // App\Http\Controllers\Medaverter\AppointmentController
    Route::get('medaverter/appointments', 'AppointmentController@index');
});

您可以为此使用路由组,这是一个示例,试试这个:

Route::group(['prefix' => 'medaverter'], function () {
        Route::get('/appointments', [AppointmentController::class, 'index'])->name('index');
     
});

或者

Route::group(['prefix' => 'medaverter'], function () {
    Route::get('/appointments', 'AppointmentController@index');
 
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM