Laravel 安全重定向过滤器在我的本地工作,但不在服务器上

Posted

技术标签:

【中文标题】Laravel 安全重定向过滤器在我的本地工作,但不在服务器上【英文标题】:Laravel secure redirect filter working in my local, but not on server 【发布时间】:2014-10-04 04:31:59 【问题描述】:

我有一个过滤器,可以将用户重定向到网站的 https:// 部分。我已经在本地测试过它,它应该可以正常工作,但是当我在现场网站上测试它时,它根本不起作用。

任何想法为什么会这样?我的本地使用的是在 Windows 7 上运行的 XAMPP。我的服务器是 CentOS 6。

这是我的过滤器...

Route::filter('secure', function()

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

还有我的路线

Route::group(array('before' => 'secure', 'prefix' => 'regionSlug/parkSlug'), function()
    // List of routes go here.
);

编辑:进一步查看后,我注意到它在我的本地也无法正常工作。它起作用的唯一原因是我的登录检查重定向并移动到站点的 https 部分。此路由组内的任何其他页面实际上都不起作用。我在每个 get 和 post 路由中都取出了 https,这设法修复了它。

【问题讨论】:

您是否尝试过在您的网站中进行调试? Route::get('zz', function() dd(Request::secure()); );那返回什么? Request::secure() 检查服务器设置的HTTPS 环境变量的内容。您还可以通过 HTTPS 在您的实时环境中(在测试页面上)尝试dd($_SERVER),以确保变量设置正确。此外,如果您的网站位于提供 SSL 的代理之后,您可能需要在那里进行额外配置以确保您的应用程序服务器知道这一点。 它在 http:// 上进行了检查,结果返回错误。在 https:// 上它返回为真的。所以它通过它的外观正确地检测到它。 SSL 来自外部站点,但我仍然认为它能够重定向到 https://。 【参考方案1】:

顺便说一句 强制通过 HTTPS 提供路由

Route::get('foo', array('https', function()

    return 'Must be over HTTPS';
));

http://laravel.com/docs/routing#basic-routing

这可能是你的答案

Route::filter('secure', function()

    if(!Request::secure())
    
        return Redirect::secure(Request::path(URL::to('/')));
    
;

【讨论】:

感谢您的评论,但我已经对我的组路线中的路线进行了此操作。 :) 欢迎您,您的 secure::path() 没有可访问的根 URL,现在它有。试一试。 由于某种原因,在路由获取方法中添加 https 是停止重定向的原因,我一拿出它,它就开始重定向到 https。我在关注这个***.com/questions/19967788/… 有道理。放置 https 永远不会让浏览器进入它以触发安全过滤器。因此它失败了。但是,如果您使用 ajax 到达该路径,重定向将不起作用,我想您也应该考虑这一点。扔一个禁忌什么的 我想知道为什么 get 方法中的 https 不会自动执行这些检查。我会认为它应该这样做。无论如何,感谢您帮助我解决这个问题。 :)

以上是关于Laravel 安全重定向过滤器在我的本地工作,但不在服务器上的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 存储 GET 参数以重定向回

Laravel href 重定向

laravel,基本安装,重定向给我一个 500 错误

我的过滤器之前的 JSF 表单登录页面重定向命中

在我的 laravel 4 和 angularjs 应用程序中从一条路线重定向到另一条路线

Laravel 5 中间件 https 上的 aws ec2 重定向循环