2014-02-27 60 views
4

我是Laravel的新手,看起来它是一个很棒的框架,但在路由方面我有一个问题。我想将所有请求都路由到名为PageController @ view的一个控制器动作,但是当前缀是admin时,我希望它将路由到Admin \ AdminController @ view。我有以下代码:将URL重定向到根文件夹后,Laravel斜杠

Route::get('/{slug?}', '[email protected]'); 

Route::group(array('prefix' => 'admin', 'namespace' => 'Admin', 'before' => 'auth'), function() 
{ 
    Route::get('/', '[email protected]'); 
}); 

但是,当我去:/管理,Laravel对待它像一个slu instead,而不是一个前缀。第一行是否有一些除了函数,或者我是否只需切换上面的行以获得正确的结果?

新的问题:

但现在我有一个新的问题,当我去http://www.mysite.com/laravel/public/admin/,Laravel重定向我http://www.mysite.com/admin/而不是调用AdminController @为主。当我像这样删除最后的斜线:http://www.mysite.com/laravel/public/admin它工作正常。

+0

如果你有一个新的问题,请点击[问问题](http://stackoverflow.com/questions/ask)按钮。不要在此处编辑您的帖子以向其添加新的问题,这对用户不公平,如何回答您的原始问题。 – Taryn

回答

13

如果按照相反顺序指定这些路由,它应该可以工作。先做最具体的路线,稍后再做更通用的路线。把它看作是“抓住这个,这个和这个,然后当没有上述匹配的时候回到这个通用的那个”。


你的新问题在于Laravel 4.1附带的(坏的,IMO)重定向规则。规则非常假设您的Laravel目录位于服务器的文档根目录下。这里的规则:

RewriteRule ^(.*)/$ /$1 [L,R=301 

正如你所看到的,在说:“如果当前的URL以斜杠结尾,只需将其重定向到/ {URL}”,从而摆脱斜线。只要您的安装位于您的服务器的文档根目录下,这一切都很好。

您可以通过指定RewriteBase(你的情况RewriteBase /laravel/public)在public/.htaccess文件规则上面解决这个问题,当然,这会从现在的环境,环境的改变。这就是为什么我认为改变Laravel 4.0的RedirectIftrailingSlash功能是一个.htaccess规则是一个坏主意。

或者,您可以完全删除该RewriteRule,并尽量不要担心您的应用现在将对网址/laravel/public/admin/laravel/public/admin/作出响应。

+0

这是正确的。 – carbontwelve

+0

它的工作原理。谢谢! – user1507868

+0

@ user1507868用你的问题的第二部分的答案更新了我的答案。 – alexrussell

3

由于订单的问题,试试这个

Route::group(array('prefix' => 'admin', 'namespace' => 'Admin', 'before' => 'auth'), function() 
{ 
    Route::get('/', '[email protected]'); 
}); 

Route::get('/{slug?}', '[email protected]'); 

重定向问题 Laravel从URL重定向与斜线到URL没有斜杠 - 默认行为。 (如果输入的URL没有斜线 - >不需要重定向) 实际的重定向不是问题。问题是,Laravel无法猜出正确的“基本”URL并为您生成错误的重定向URL。

打开app/config/app.php并设置url条目以匹配项目的根目录。我想你的情况是http://www.mysite.com/laravel/public

+0

我试过了,它工作。谢谢!但现在我有第二个问题。当我去/管理它的作品。但是当我去/ admin /它重定向到http:// localhost/admin而不是Laravel的公共文件夹。 – user1507868

+0

编辑你的问题,请发布完整的网址,你正试图打开和全网址,你被重定向到。 – Andreyco

+0

我将url更改为app/config/app.php,但Laravel仍然将我重定向到根文件夹。 – user1507868

4

检查您是否在您的公共文件夹中有文件夹“admin”。如果有的话,Laravel会自动重定向。

1

以下RewriteRule适合我。我必须从上面的alexrussel的答案中删除/ in/$ 1。包括/将我重定向到根文件夹。

#For http://localhost/work/proj1/public/a/ RewriteBase is /work/proj1/public 
RewriteBase /repo/qs/public 
RewriteRule ^(.*)/$ $1 [L,R=301] 

我在Linux Mint 17 64位上使用laravel v4.2,apache v2.4.7,php v5.5.9。

0

如果您知道目录名称,请为其制定规则。这对我很好:

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    RewriteRule ^(forum)($|/) - [L] 

    # Redirect Trailing Slashes... 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 
+0

请您详细说明您的答案,增加一些关于您提供的解决方案的更多描述? – abarisone

相关问题