带前缀的路由组中子目录的 Laravel 默认路由


Laravel default route for subdirectory in a route group with prefix

我有一个前缀admin的路由组。我希望如果输入 URL http://www.example.com/admin/,默认情况下它会加载驻留在 http://www.example.com/admin/login 的登录页面。登录页面实际上是一个控制器,但我不介意admin/是否重定向到admin/login或直接路由到其控制器。从我在这里看到的其他答案来看,重定向似乎最好确保链接不会乱七八糟。

我已经尝试了各种路由和重定向解决方案,包括此处建议的解决方案,但我遇到了错误 404。推荐的正确方法是什么?

我的路由组如下所示:

Route::group(array('prefix' => 'admin', 'namespace' => 'MyNamespace'Controllers'Admin'), function()
{    
    //the following work fine
    Route::get('login', array('uses' => 'AdminLoginController@showLogin'));
    Route::post('login', array('uses' => 'AdminLoginController@doLogin'));
    Route::get('logout', array('uses' => 'AdminLoginController@doLogout'));
    //other resource routes for the respective admin pages
});

在路由组之外,我添加了以下内容,以便即使没有尾部斜杠的http://www.example.com/admin也可以进入登录页面,这工作正常。

Route::get('admin', function() { return Redirect::to("admin/login"); });

问题出在给出错误 404 的http://www.example.com/admin/上。我尝试了以下所有方法(显然是分开的),但没有一个有效。他们都在路线组内。

    Route::get('/', function() { return Redirect::to("admin/login"); });
    Route::get('', function() { return Redirect::to("admin/login"); });
    Route::get('/', function() { return Redirect::to("login"); });
    Route::get('', function() { return Redirect::to("login"); });
    Route::get('/', array('uses' => 'AdminLoginController@showLogin'));
    Route::get('', array('uses' => 'AdminLoginController@showLogin'));

我也在路由组之外尝试过这个:

    Route::get('admin/', function() { return Redirect::to("admin/login"); });

它们都不起作用。为带有前缀子目录的路由组设置默认路由的正确方法是什么?

.htaccess中使用此代码

因此,您的服务器会将带有尾部斜杠的 URL 重定向到没有的 URL。

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
# redirect everything to url without trailing slash
RewriteCond %{HTTPS} =on
RewriteRule ^(.+)$ - [env=ps:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.+)$ - [env=ps:http]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_METHOD} ^GET
RewriteRule ^(.+)/$ %{ENV:ps}://%{SERVER_NAME}/$1 [R=301,L]
# pretty urls
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
</IfModule>

默认情况下,Laravel首先进行了重定向,但后来被删除了。