2013-03-15 84 views
2

我有以下代碼:Laravel 3 HTTP和HTTPS路線

Route::get('/', function() 
{ 
    return 'non secure page'; 
}); 
Route::get('/', array('https' => true, function() 
{ 
    return 'secure page'; 
})); 

我希望發生的是,這兩條路將被區別對待。首先是http://example.com請求,第二個https://example.com。這些頁面分別應顯示「非安全頁面」和「安全頁面」文本。實際發生的是兩者都顯示文本「安全頁面」。這必定意味着這兩條路徑將被視爲相同,即如果該請求是通過https或http並不重要 - 同樣的路線被觸發。

我知道我可以通過使用if (Request::secure()){ //routes };解決我的問題。但是那使我的問題有什麼用都laravel HTTPS安全路線?他們取得什麼成果以及何時應該使用它們?

我看過的文檔,但它不是我清楚什麼是應該發生的。

+1

這是奇怪,我試着爲自己和你是正確的,安全的路線被稱爲甚至在非安全的電話。讓我們看看有人會啓發我們:) – Adrenaxus 2013-03-15 15:55:59

+0

你有沒有對你的服務器/ .htaccess文件做任何事情,將所有的http路由路由到https路由? – Jonathan 2013-03-16 17:04:32

+0

@Jonathan不,沒有碰過我的htaccess文件。那麼路線是否適合你? – 2013-03-18 11:58:42

回答

8

文檔說:

當定義路由,則可以使用「HTTPS」屬性來指示HTTPS協議應該用於產生一個URL時或重定向到所述路線。

「https」和::secure()僅在生成到路由的URL時使用,它們不用於提供僅限https的路由。你可以寫一個過濾器來防止非HTTPS路由(下面的例子)。或者,如果你想防止任何非HTTPS訪問您的整個域,那麼你應該重新配置你的服務器上,而不是在PHP中做到這一點。

Route::filter('https', function() { 
    if (!Request::secure()) return Response::error(404); 
}); 

替代濾波器響應:

Route::filter('https', function() { 
    if (!Request::secure()) return Redirect::to_secure(URI::current()); 
}); 

參考文獻:

  1. http://laravel.com/docs/routing#https-routes
  2. http://laravel.com/docs/routing#filters
3

的問題是不相關的HTT PS。

文檔說,

注:路線在他們註冊的順序評估,所以在您的routes.php文件文件的底部註冊任何「包羅萬象」的路線。

這意味着你的

Route::get('/', array('https' => true, function() 
{ 
    return 'secure page'; 
})); 

過度寫

Route::get('/', function() 
{ 
    return 'non secure page'; 
}); 

實際上,我是在這裏帶領由laravel.io星火,我想我會無論如何澄清疑問。

問候