【问题标题】:Laravel 3 HTTP and HTTPS routesLaravel 3 HTTP 和 HTTPS 路由
【发布时间】:2013-03-04 07:59:49
【问题描述】:

我有以下代码:

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 安全路由有什么用?它们的作用是什么?应该在什么时候使用它们?

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

【问题讨论】:

  • 这很奇怪,我自己试过了,你是对的,即使在非安全呼叫中也会调用安全路由。让我们看看有人会启发我们:)
  • 您是否对您的 server/.htaccess 文件进行了任何操作以将所有 http 路由路由到 https 路由?
  • @Jonathan 不,还没有碰过我的 htaccess 文件。那么这些路线对你有用吗?

标签: laravel laravel-3


【解决方案1】:

文档说:

在定义路由时,您可以使用“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

【讨论】:

    【解决方案2】:

    问题与 HTTPS 无关。

    文档说,

    注意:路由是按照它们注册的顺序进行评估的,所以在你的 routes.php 文件的底部注册任何“catch-all”路由。

    这意味着你的

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

    正在覆盖

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

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

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2011-04-28
      • 2015-05-24
      • 2014-03-11
      • 2018-03-15
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多