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


Laravel force SSL gives 'This webpage has a redirect loop'

我正在使用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:(

有人能帮我一下吗?

我遇到了同样的问题,最后找到了解决方案,使用:

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"环境变量,包括本地服务器、登台服务器和生产服务器。