【发布时间】:2015-03-06 19:26:11
【问题描述】:
我有一个前缀为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"); });
它们都不起作用。为带有前缀子目录的路由组设置默认路由的正确方法是什么?
【问题讨论】:
-
当您尝试
Route::get('/', function() { return Redirect::to("admin/login"); });(顺便说一句应该是正确的)时,您在路由组之外还有Route::get('admin')吗? -
我尝试删除
Route::get('admin')并添加Route::get('/')重定向,效果保持不变。使用尾部斜杠它不起作用,没有它它起作用。不过,我还观察到了其他一些东西,可能相关也可能不相关。在我正在测试的PC上,域为http://localhost/myapp/admin/,由于某种原因,它重定向到http://localhost/admin/,省略了URL中的myapp,以HTTP 404结束。而http://localhost/myapp/admin(没有尾部斜杠) 正确重定向到http://localhost/myapp/admin/login -
我明白了。您应该使用
http://localhost/myapp/public/admin或设置一个虚拟主机,其文档根目录指向公共目录。然后你可以像myapp.dev/admin一样使用它 -
对不起,我忘了提及我已将
/public中的内容移至根文件夹。我不认为它是相关的。 -
我发现了那个奇怪的重定向是怎么回事。我在
.htaccess中有这一行,它是由 Laravel 默认生成的。 ` RewriteRule ^(.*)/$ /$1 [L,R=301]` 我不知道是什么原因,但这是我从/myapp/admin/重定向到/admin的原因404。我不知道为什么/myapp被省略了,它是应用程序的根文件夹。
标签: php laravel laravel-4 laravel-routing