我有以下代码:
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安全路由的用途是什么?他们取得了什么,何时使用?
我看过文档,但我不清楚应该发生什么。
答案 0 :(得分: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 :(得分:3)
问题与HTTPS无关。
文档说,
注意:路由按照它们的注册顺序进行评估,因此请在routes.php文件的底部注册任何“全部捕获”路由。
这意味着你的
Route::get('/', array('https' => true, function()
{
return 'secure page';
}));
覆盖
Route::get('/', function()
{
return 'non secure page';
});
我实际上是来自laravel.io的Spark的导演,我想我无论如何都会澄清这个疑问。
此致