I am using the following code in my template to load in my CSS file:
<link rel="stylesheet" href="{!! URL::asset('css/app.css') !!}">
If I view the page over https on my local machine then the link to the app.css file is also https, however on my live server this isn't happening. If you view the live site over https and view the source you can see that the link to the CSS file is still over normal http and so doesn't load. Does anyone know why this is happening?
While your users are accessing via HTTPS, your CloudFlare configuration is passing those requests onto your server using HTTP. You have two options:
Turn on CloudFlare's Full or Strict SSL. https://blog.cloudflare.com/origin-server-connection-security-with-universal-ssl/
Set up your webserver to see the X-Forwarded-Proto
header and tell PHP it's being accessed via HTTPS when that header's value is https
. How to do this depends a bit on your webserver. In nginx, for example, I do this for Amazon's ELB (which sends the same headers):
map $http_x_forwarded_proto $is_https {
default off;
https on;
}
and then this in my FastCGI params file:
fastcgi_param HTTPS $is_https if_not_empty;
In Apache, I think you can do this if mod_setenvif is installed:
SetEnvIf x-forwarded-proto https HTTPS=on
You may need to use secure_asset
function instead.
<link rel="stylesheet" href="{!! secure_asset('css/app.css') !!}">