我是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');
});
但是当我去:/ admin时,Laravel将它视为slug而不是前缀 . 是否有一些除了第一行的功能,或者我只需要切换上面的行以获得正确的结果?
New problem:
但是当我去http://www.mysite.com/laravel/public/admin/时,我有一个新问题,Laravel将我重定向到http://www.mysite.com/admin/而不是调用AdminController @ main . 当我在最后删除斜杠时:http://www.mysite.com/laravel/public/admin它工作正常 .
5 回答
如果您以相反的顺序指定这些路由,它应该工作 . 首先执行最具体的路由,然后再执行更通用的路由 . 把它想象成“ grab 这个,这个,这个,然后在没有上述匹配时回到这个通用的” .
您的新问题在于Laravel 4.1附带的(错误的,IMO)重定向规则 . 规则非常假设您的Laravel
public
目录位于服务器的文档根目录中 . 这是规则:正如你所看到的,那就是说“如果当前URL以斜线结尾,只需将其重定向到/ ”,从而摆脱斜线 . 只要您的安装位于服务器的文档根目录上,这一切都很好 .
您可以通过在
public/.htaccess
文件中指定RewriteBase
(在您的情况下为RewriteBase /laravel/public
)上面的规则来解决此问题,但当然,现在这将从环境更改为环境 . 这就是为什么我认为将Laravel 4.0的RedirectIftrailingSlash
功能更改为.htaccess
规则是一个坏主意 .或者,您可以完全删除
RewriteRule
并尽量不要担心您的应用现在会对这两个网址/laravel/public/admin
和/laravel/public/admin/
做出回应 .检查 public 文件夹中是否有 folder "admin" . 如果有的话,Laravel会自动重定向 .
由于订单很重要,试试这个
Redirection problem Laravel从带有尾部斜杠的URL重定向到不带斜杠的URL - 默认行为 . (如果输入不带斜杠的URL - >不需要重定向)实际重定向不是问题 . 问题是,Laravel无法猜出"base" URL并为您生成错误的重定向网址 .
打开
app/config/app.php
并设置url
条目以匹配项目的根目录 . 我猜你的情况是http://www.mysite.com/laravel/public
.以下RewriteRule适合我 . 我不得不从上面的alexrussel的答案中删除/ in / $ 1 . 包括/将我重定向到根文件夹 .
我在Linux Mint 17 64位上使用laravel v4.2,apache v2.4.7,php v5.5.9 .
如果您知道目录名称,请为其制定规则 . 这对我来说很好: