Laravel:无协议设置资产

Che*_*Lin 8 php laravel laravel-helper

使用asset如下的帮助函数:

<script src="{{ asset('/assets/js/jquery-2.1.1.min.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)

会得到的

<script src="http://xxx.xxx.com/assets/js/jquery-2.1.1.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

是否有任何laravel内置解决方案可以让它成为现实

<script src="//xxx.xxx.com/assets/js/jquery-2.1.1.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

httphttps协议正确显示?

[编辑]

我知道Laravel通常会正确地检测到协议,但是在负载均衡器后面却没有.所以我仍然在寻找解决方案.

Atr*_*eur 5

仅当请求被视为安全时,Laravel才会创建安全链接.

如果非httpS流量来自"可信代理",那么Laravel已经有办法将非httpS流量视为"安全".

您可以在应用程序服务提供程序中声明此类可信代理,如下所示:

 Request::setTrustedProxies(array( '199.27.128.0/21', 'some other range'));
Run Code Online (Sandbox Code Playgroud)

另外,请确保您的负载均衡器正确设置以下标头:

Host, X-Forwarded-Host, X-Forwarded-Port, X-Real-IP, X-Forwarded-For and X-Forwarded-Proto
Run Code Online (Sandbox Code Playgroud)

像Cloudflare这样的"公共"代理已经做到了这一点.

基本上,这里的一点是客户端连接在其中一个前端服务器(作为代理)终止,因此我们必须将来自该服务器的通信声明为受信任,以便laravel使用来自代理服务器的头而不是readed localy的值.

这样做可以启用Request :: isSecure()或Request :: ip()等函数来返回一致的结果.


Jer*_*dev 1

Laravel 会自动将资产的 url 更改为用于加载站点的协议。

如果您的网站通过安全连接加载,资产链接将自动使用 https。

更新:

如果您确实只想显示资源//,您可以编写自己的HTML 宏