2

我有以下代码:

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 安全路由有什么用?它们能达到什么目的,什么时候应该使用它们?

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

4

2 回答 2

8

文档说:

定义路由时,您可以使用“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
于 2013-03-18T12:20:52.573 回答
3

该问题与 HTTPS 无关。

文件说,

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

这意味着你的

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

正在覆盖

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

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

问候

于 2013-04-23T15:00:41.243 回答