我正在使用这种格式加载我的CSS:
它可以加载所有http请求
但是当我用SSL(https)加载我的登录页面时,我得到了一个 ...page... was loaded over HTTPS, but requested an insecure stylesheet 'http...
有人可以告诉我如何通过https而不是http来使刀片加载资产?
我应该尝试安全加载资产吗?或者这不是Blade的工作吗?
asset
当网站使用HTTPS时,当它通过HTTP协议加载资源时,我遇到了功能问题,这导致了"混合内容"问题.
要解决此问题,您需要将其添加\URL::forceScheme('https')
到AppServiceProvider
文件中.
所以我看起来像这样(Laravel 5.4):
当您仅在服务器(
config('app.env') === 'production'
)上而不是本地需要https时,这很有用,因此不需要强制asset
函数使用https.
这是一个更好的答案,因为我只想在生产服务器上使用https
我使用了相同的模式,但不仅仅是查看“ app.env”,而是查看了“ app.url”。如果以“ https”开头,那么我强制执行该方案。
2> maiorano84..:我相信secure_asset是你正在寻找的.
5/15/2018编辑:虽然我的答案直接解决了问题,但考虑到Laravel现在可以做什么,它有点过时了.可能存在您希望在某些环境中强制使用HTTPS而在其他环境中不强制使用HTTPS的情况.
请参阅下面的Scofield答案,以获得更灵活的解决方案,以涵盖这些案例.
3> Abdul Rehman..:我通过使用@Scofield回答
\URL::forceScheme('https');
此解决方案还适用于显示所有路由的https,但不适用于$ request-> url()的我,它显示http而不是https所以我用
$this->app['request']->server->set('HTTPS', true);
代替\URL::forceScheme('https');
我正在使用Laravel 5.4并更新.env文件和appserviceproviders
app['request']->server->set('HTTPS', true); } Schema::defaultStringLength(191); } /** * Register any application services. * * @return void */ public function register() { // } }在我的环境文件中,我已经更改了
APP_ENV=local to APP_ENV=developmentAPP_ENV =本地主机的本地APP_ENV =工作服务器上的开发/生产
更改环境后,运行此artisan命令
php artisan config:clear希望能帮助到你 :-)
4> Ozan Kurt..:另一种方法是
true
作为第二个参数传递./** * Generate an asset path for the application. * * @param string $path * @param bool $secure * @return string */ function asset($path, $secure = null) { return app('url')->asset($path, $secure); }如下所示,
secure_asset
只需asset
使用第二个参数调用即可true
./** * Generate an asset path for the application. * * @param string $path * @return string */ function secure_asset($path) { return asset($path, true); }
5> Goran Siriev..:问题是我本地计算机上的cloudflare工作正常,但在线服务器无法解决
public function boot() { if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { \URL::forceScheme('https'); } }