Laravel强制SSL给出'此网页有重定向循环'

时间:2014-05-08 09:30:22

标签: php ssl heroku laravel laravel-4

我使用的是Laravel 4.1,并希望强制扩展SSL网站。我的应用程序部署在Heroku上。 将此添加到App::before或过滤器:

if( ! Request::secure())
{
    return Redirect::secure(Request::path());
}

但这给了我'这个网页有一个重定向循环'信息。 如果我通过手动输入https://来访问某个页面,它会正确地提供该页面;但任何链接或表单操作都指向http://,我不想要。

另外,我尝试将https参数添加到某个路由,例如:

Route::get('about', ['https', function()
{
    // do something
}]);

但这会返回404 :(

有人能帮助我吗?

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,最后通过使用:

找到了解决方案
App::before(function($request)
{
    if( (Request::header('x-forwarded-proto') <> 'https') && !App::environment('local',     'staging')) {
        return Redirect::secure(Request::getRequestUri());
    }
});

这是由于Heroku将此信息传递给与Laravel默认使用的变量不同的变量。

如果您有兴趣获得正确的环境检测,这就是我在Laravel和Heroku中使用的:

$env = $app->detectEnvironment(function() {
    if (getenv('LARAVEL_ENV')) {
        return getenv('LARAVEL_ENV');
    } else {
        return 'local'; // Default
    }
});

您需要在不同的服务器中使用本地,分段或生产设置“LARAVEL_ENV”环境变量。

使用这两个,只在生产环境中强制使用HTTPS流量。