Laravel force SSL 给出“此网页有重定向循环”

jOp*_*cic 3 php ssl heroku laravel laravel-4

我正在使用 Laravel 4.1,并且想要强制 SSL 站点范围。我的应用程序部署在 Heroku 上。将此添加到App::before或作为过滤器:

if( ! Request::secure())
{
    return Redirect::secure(Request::path());
}
Run Code Online (Sandbox Code Playgroud)

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

另外,我尝试向https某些路由添加参数,例如:

Route::get('about', ['https', function()
{
    // do something
}]);
Run Code Online (Sandbox Code Playgroud)

但这会返回 404 :(

有人可以帮我吗?

小智 5

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

App::before(function($request)
{
    if( (Request::header('x-forwarded-proto') <> 'https') && !App::environment('local',     'staging')) {
        return Redirect::secure(Request::getRequestUri());
    }
});
Run Code Online (Sandbox Code Playgroud)

这是因为 Heroku 在与 Laravel 默认使用的变量不同的变量中传递此信息。

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

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

您需要在本地、暂存或生产的不同服务器中设置“LARAVEL_ENV”环境变量。

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