我有一个前缀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首先进行了重定向,但后来被删除了。