Laravel 3 HTTP和HTTPS路由

时间:2013-03-15 14:40:52

标签: laravel laravel-3

我有以下代码:

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安全路由的用途是什么?他们取得了什么,何时使用?

我看过文档,但我不清楚应该发生什么。

2 个答案:

答案 0 :(得分:8)

文档说:

  

定义路由时,您可以使用“https”属性来指示在生成URL或重定向到该路由时应使用HTTPS协议。

“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

答案 1 :(得分:3)

问题与HTTPS无关。

文档说,

  

注意:路由按照它们的注册顺序进行评估,因此请在routes.php文件的底部注册任何“全部捕获”路由。

这意味着你的

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

覆盖

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

我实际上是来自laravel.io的Spark的导演,我想我无论如何都会澄清这个疑问。

此致