2014-02-27 78 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

相關問題