Laravel默认路由,用于具有前缀的路由组中的子目录

时间:2015-01-08 15:55:43

标签: php laravel laravel-4 laravel-routing

我有一个前缀为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"); });

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

1 个答案:

答案 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首先进行重定向,但后来被删除了。