使用asset
辅助函数,如下所示:
<script src="{{ asset('/assets/js/jquery-2.1.1.min.js') }}"></script>
将获得
<script src="http://xxx.xxx.com/assets/js/jquery-2.1.1.min.js"></script>
是否有任何laravel内置解决方案可以让它成为
<script src="//xxx.xxx.com/assets/js/jquery-2.1.1.min.js"></script>
并使用http
和https
协议正确显示?
[编辑]
我知道Laravel通常会正确检测协议,但在负载均衡器后面却没有。所以我仍然在寻找解决方案。
答案 0 :(得分:5)
只有在请求被视为安全的情况下,Laravel才会创建安全链接。
Laravel已经有办法将非httpS流量视为&#34;安全&#34;如果它来自&#34;受信任代理&#34;。
您可以在应用程序服务提供程序中声明此类可信代理:
Request::setTrustedProxies(array( '199.27.128.0/21', 'some other range'));
另外,请确保您的负载均衡器正确设置以下标题:
Host, X-Forwarded-Host, X-Forwarded-Port, X-Real-IP, X-Forwarded-For and X-Forwarded-Proto
&#34;公共&#34;像cloudflare这样的代理已经做到了这一点。
基本上,这里的一点是客户端连接在其中一个前端服务器(作为代理)终止,因此我们必须将来自该服务器的通信声明为受信任,以便laravel使用来自代理服务器的头而不是值当地人。
执行此操作可启用Request :: isSecure()或Request :: ip()等函数以返回一致的结果。
答案 1 :(得分:1)
Laravel会自动将资产的网址更改为用于加载网站的协议。
如果您的网站是通过安全连接加载的,资产链接将自动使用https。
<强>更新强>
如果您确实希望仅显示//
的资源,则可以编写自己的HTML macro。
答案 2 :(得分:0)
生成资产URL的代码在illuminate / Routing / UrlGenerator.php
中有一个forceSchema()方法可以很容易地修改,以满足你的需要,但说实话,这个功能可能应该在Laravel中,并且可能值得在他们的github上提交一个pull请求。
答案 3 :(得分:0)
您应该查看这篇文章http://ankitpokhrel.com/explore/overriding-base-url-in-laravel-5/。您基本上可以覆盖 @Override
public void onBindViewHolder(FeedsViewHolder feedViewHolder, int i)
{
if(d1.feeds.get(i).isMachineOrHuman())
{
feedViewHolder.chat.setBackgroundResource(R.drawable.user);
**feedViewHolder.chat.setGravity(Gravity.RIGHT);** // *Sent Message*
feedViewHolder.chat.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);
}
else {
feedViewHolder.chat.setBackgroundResource(R.drawable.ais);
**feedViewHolder.chat.setGravity(Gravity.LEFT);** // *Receive Message*
feedViewHolder.chat.setText(d1.feeds.get(i).getMessage());
}
中的url()
功能,以生成AppServiceProvider
而不是/assets/something.js
等网址
答案 4 :(得分:0)
asset()使用当前的请求方案(HTTP或HTTPS)生成资产的URL:
如果您想提供一个您不了解http或https的外部网址,例如cdn网址,您可以写如下
<script src="{!! asset('//code.jquery.com/jquery-2.1.1.min.js') !!}"></script>
但是你可以像
一样写<script src="//{!! Request::server ('HTTP_HOST').'/assets/js/jquery-2.1.1.min.js' !!}"></script>
OR
<script src="{!! asset('//'.Request::server ('HTTP_HOST').'/assets/js/jquery-2.1.1.min.js') !!}"></script>
答案 5 :(得分:0)
我有同样的问题,然后我发现asset()方法有一个可选的第二个变量,对于SSL请求是true或false。
我使用的解决方案如下:
<link rel="stylesheet" href="{{ asset('assets/bootstrap/3.3.7/css/bootstrap.min.css', !App::isLocal()) }}" />
<script type="text/javascript" src="{{ asset('assets/parsley/2.4.4/parsley.min.js', !App::isLocal()) }}"></script>
注意:
!App::islocal()
如果我的应用程序环境是本地的,则不会选择SSL,但是在生产环境中,资产将通过SSL调用。
答案 6 :(得分:0)
我通常使用
<script src="/assets/js/jquery-2.1.1.min.js"></script>
不调用asset()函数
我知道,但是在我工作的90%的网站中,这是一个完美的解决方案答案 7 :(得分:0)
这可能会帮助某人。
助手功能方式:
function schemalessAsset($path)
{
if (url()->isValidUrl($path)) {
return str_replace(['http:','https:'], '', $path);
}
return url()->assetFrom(url()->formatRoot('//'), $path);
}
可更改的方式:
URL::macro('schemalessAsset', function ($path) {
if (URL::isValidUrl($path)) {
return str_replace(['http:','https:'], '', $path);
}
return URL::assetFrom(URL::formatRoot('//'), $path);
});
在Laravel 5.6中测试。它也应该在其他版本中工作。