我有一个前缀为admin
的路由组。我希望如果输入URL http://www.example.com/admin/
,默认情况下会加载位于http://www.example.com/admin/login
的登录页面。登录页面实际上是一个控制器,但我不介意admin/
重定向到admin/login
或直接路由到其控制器。从我在这里看到的其他答案看来,重定向似乎更好,以确保链接不会搞砸。
我尝试了路由和重定向的各种解决方案,包括建议的here解决方案,但我得到错误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"); });
问题在于http://www.example.com/admin/
给出了错误404.我尝试了以下所有内容(显然分开),但都没有。所有这些都在路线组内。
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"); });
它们都不起作用。为具有前缀子目录的路由组设置默认路由的正确方法是什么?
答案 0 :(得分:0)
在.htaccess
因此,您的服务器会将带有结尾斜杠的网址重定向到没有的网址。
<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首先进行重定向,但后来被删除了。