使用SSL将Laravel 5.2上的某些路由设置为重定向的正确方法是什么? http->https
此外,如果我在安全页面中加载http
组件,我仍然可以加载http
资产,还是firefox / chrome / IE会出现问题?
答案 0 :(得分:2)
如果您需要重定向到Https
,那么laravel
redirect
中就有一个您可能想知道的选项。
有一个名为redirect()
检查..vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
文件
if (! function_exists('redirect')) {
/**
* Get an instance of the redirector.
*
* @param string|null $to
* @param int $status
* @param array $headers
* @param bool $secure
* @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse
*/
function redirect($to = null, $status = 302, $headers = [], $secure = null)
{
if (is_null($to)) {
return app('redirect');
}
return app('redirect')->to($to, $status, $headers, $secure);
}
}
检查参数$to = null, $status = 302, $headers = [], $secure = null
Https
有一个$secure
选项,将其设置为true,您将获得EX的Https
重定向:
redirect('/', 302, [], true)
注意: 我也使用了这种方式,当网站在404 error
上运行并且资源加载到{{{}时,我确实获得了Https
1}}我记得,最好再次检查一下。 :)
有一个用于加载安全资产的帮助器secure_asset()
我在Http
中进行测试时遇到了一些困难,而在Http
中进行了测试,有些资产没有加载,重定向无效,我们做的是创建一个单独的帮助程序来删除模式,
Https
然后if (! function_exists('urlWithoutSchema')) {
/**
* Generate a url for the application without schema.
*
* @param string $path
* @param mixed $parameters
* @param bool $secure
* @return string
*/
function urlWithoutSchema($path = null, $parameters = array(), $secure = null)
{
$url = app('url')->to($path, $parameters, $secure);
return str_replace(parse_url($url, PHP_URL_SCHEME).':', '', $url);
}
}
会产生urlWithoutSchema("https://laravel.com/")
如果您使用//laravel.com/
,则会重定向到redirect(urlWithoutSchema("your-site-name.com"))
,这意味着如果您使用//your-site-name.com/
网站,则会将Https
重定向到Https
。
同样的东西可用于加载资产,如
Http
然后,当您在<link href="{{ urlWithoutSchema('css/vendor.css') }}" rel="stylesheet" />
Http
上运行时,css/vendor.css
将加载,如果您在Http
上运行,则资源将通过Https
加载。
使用此功能可以避免出现Https
并且没有Https