Laravel资产URL忽略https

3
我在模板中使用以下代码加载CSS文件:
```html

我在模板中使用以下代码加载CSS文件:

```
<link rel="stylesheet" href="{!! URL::asset('css/app.css') !!}">

如果我在本地机器上通过https查看页面,那么对于app.css文件的链接也是https的。然而,在我的生产服务器上却没有发生这种情况。如果您通过https查看实时网站并查看源代码,则可以看到CSS文件的链接仍为普通的http,因此无法加载。有人知道这是为什么吗?
2个回答

4
当您的用户通过HTTPS访问时,CloudFlare配置将这些请求使用HTTP传递到您的服务器。您有两个选择:
  1. 启用CloudFlare的完整或严格SSL。 https://blog.cloudflare.com/origin-server-connection-security-with-universal-ssl/
  2. 设置您的Web服务器查看X-Forwarded-Proto头,并告诉PHP它是通过HTTPS访问的,当该头的值为https时。如何执行此操作取决于您的Web服务器。例如,在nginx中,我对Amazon的ELB(发送相同的标头)执行此操作:

map $http_x_forwarded_proto $is_https {
    default off;
    https on;
}

然后在我的 FastCGI 参数文件中添加以下内容:

fastcgi_param  HTTPS              $is_https if_not_empty;

如果安装了mod_setenvif模块,那么在Apache中可以完成这个操作:

SetEnvIf x-forwarded-proto https HTTPS=on

2
您可能需要使用secure_asset函数。
<link rel="stylesheet" href="{!! secure_asset('css/app.css') !!}">

如果我这样做,会出现错误:Method secure_asset does not exist - geoffs3310
@geoffs3310 我已经编辑了这个答案。它只是 secure_asset()。http://laravel.com/docs/5.1/helpers#method-secure-asset - ceejayoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接