在URL重定向到根文件夹后,Laravel斜杠

use*_*868 4 php routing admin dynamic laravel

我是Laravel的新手,它似乎是一个很棒的框架,但在路由方面我有一个问题.我想将所有获取请求路由到一个名为PageController @ view的控制器操作,但是当前缀为admin时,我希望它路由到Admin\AdminController @ view.我有以下代码:

Route::get('/{slug?}', 'PageController@view');

Route::group(array('prefix' => 'admin', 'namespace' => 'Admin', 'before' => 'auth'), function()
{
    Route::get('/', 'DashboardController@main');
});
Run Code Online (Sandbox Code Playgroud)

但是当我去:/ admin时,Laravel将它视为slug而不是前缀.是否有一些除了第一行的功能,或者我只需要切换上面的行以获得正确的结果?

新问题:

但是当我访问http://www.mysite.com/laravel/public/admin/时,我遇到了一个新问题,Laravel将我重定向到http://www.mysite.com/admin/而不是调用AdminController @ main .当我像这样删除最后的斜杠:http://www.mysite.com/laravel/public/admin它工作正常.

ale*_*ell 13

如果您以相反的顺序指定这些路由,它应该工作.首先执行最具体的路由,然后再执行更通用的路由.把它想象成"抓住这个,这个,这个,然后在没有上述匹配时回到这个通用的".


您的新问题在于Laravel 4.1附带的(错误的,IMO)重定向规则.规则非常假设您的Laravel public目录位于服务器的文档根目录中.这是规则:

RewriteRule ^(.*)/$ /$1 [L,R=301
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,那就是说"如果当前URL以斜线结尾,只需将其重定向到/ {url}",从而摆脱斜线.只要您的安装位于服务器的文档根目录上,这一切都很好.

您可以通过在文件中指定RewriteBase(在您的情况下RewriteBase /laravel/public)该规则上来解决此问题public/.htaccess,但当然,现在这将从环境更改为环境.这就是为什么我认为改变Laravel 4.0的RedirectIftrailingSlash功能.htaccess是一个不好的主意.

或者,您可以删除RewriteRule完全,尽量不要担心的事实,您的应用程序现在就这两个URL响应/laravel/public/admin/laravel/public/admin/.