2014-01-07 94 views
0

要強制HTTPS命名的路由資源,在Laravel文檔說做到以下幾點:訪問路線::使用HTTPS在Laravel 4

Route::get('foo', array('https', function() 
{ 
    return 'Must be over HTTPS'; 
})); 

現在,我第一次Laravel應用程序,我一直在用資源控制器。我不認爲我會將它們用於我的第二個應用程序,繼續閱讀我已閱讀的內容,但現在它們愉快地坐在我的router.php文件中。

我想強制我的應用程序的後臺部分使用HTTPS。所以,我的開局就如下:

Route::resource('backoffice', array('https','BackofficeController')); 

Laravel不喜歡陣列。

所以,相反我想我會嘗試將在下一個參數:

Route::resource('backoffice', 'BackofficeController', 'https')); 

但接下來的參數必須是一個數組。我找不到任何文檔,但我將它轉換爲數組。它仍然沒有工作。

Route::resource('backoffice', 'BackofficeController', array('https'))); 

我甚至嘗試:

Route::resource('backoffice', 'BackofficeController', array('https'=>true))); 

然而,失敗了。那麼,我如何強制資源使用https?

回答

2
Route::filter('forceHttps', function($req){ 
    if (! Request::secure()) { 
     return Redirect::secure(Request::getRequestUri()); 
    } 
}); 

Route::group(['before' => 'forceHttps'], function(){ 
    Route::resource('backoffice', 'BackofficeController'); 
}); 
+0

感謝您的及時答覆。我嘗試了這一點,它確實有幫助,但它仍然不起作用。如果我瀏覽到hxxp:// mysite/backoffice,它現在會重定向到hxxps://mysite.backoffice,但是,我仍然收到404錯誤。 – Puzbie

+0

對不起,我在完成之前點擊了添加評論。正如我在上面的編輯中所解釋的,如果我瀏覽到hxxp:// mysite/backoffice,它現在會重定向到hxxps://mysite.backoffice,但是,我仍然收到404錯誤。 – Puzbie

+0

'Redirect :: secure(...)'輸出的URL是什麼?你在本地虛擬主機上開發嗎?如果是這樣,網址是什麼?我爲我的項目使用'http:// projectname.loc'。測試這個解決方案,它的工作原理。 – Andreyco

0

假設你有一個像一個Andreyco過濾功能的建議,這似乎很好,你可以做一些與此類似:

//Andreyco's filter 
Route::filter('forceHttps', function($req){ 
if (! Request::secure()) { 
    return Redirect::secure(Request::getRequestUri()); 
} 
}); 
//backoffice group routing 
Route::group(array('prefix' => 'backoffice', 'before' => 'forceHttps'), function() 
{ 
    Route::any('/',    'App\Controllers\[email protected]'); 
    Route::resource('otherBackOfficeURI', 'App\Controllers\OtherBOController'); 
    //other routes & controllers here... 
}); 

這樣,一切都開始site.tld /後臺會通過https過濾器(最有可能通過isAdmin過濾器),然後檢查內部函數路由規則。我認爲這樣會更方便。