当前位置:  开发笔记 > 编程语言 > 正文

在Laravel中使用https加载刀片资产

如何解决《在Laravel中使用https加载刀片资产》经验,为你挑选了5个好方法。

我正在使用这种格式加载我的CSS: 它可以加载所有http请求

但是当我用SSL(https)加载我的登录页面时,我得到了一个 ...page... was loaded over HTTPS, but requested an insecure stylesheet 'http...

有人可以告诉我如何通过https而不是http来使刀片加载资产?

我应该尝试安全加载资产吗?或者这不是Blade的工作吗?



1> Scofield..:

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=development

APP_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');
        }
    }

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有