启用S​​SL图标后,如果调用网站的http版本,则无法正确显示字体

时间:2016-09-22 19:52:46

标签: css wordpress .htaccess ssl fonts

这里我有一个用CSS定义的图标字体

.social li a.facebook:before { font-family: 'icomoon'; content: "\f09a"; }

现在,如果我拨打http://www.somewebsite.com而不是图标,则会显示内容为F09A的矩形。在源代码(Ctrl + U)中,css包含在内

<link rel='stylesheet' id='font-css' href='http://www.somewebsite.com/wp-content/themes/sometheme/css/iconfont.css?ver=4.3.6' type='text/css' media='all' />

在这个css中,相对包含字体

@font-face {
    font-family: 'icomoon';
    src:url('../fonts/icomoon.eot?-m6u1i9');
    src:url('../fonts/icomoon.eot?#iefix-m6u1i9') format('embedded-opentype'),
        url('../fonts/icomoon.woff') format('woff'),
        url('../fonts/icomoon.ttf') format('truetype'),
        url('../fonts/icomoon.svg?-m6u1i9#icomoon') format('svg');
    font-weight: normal;
    font-style: normal;
}

Wordpress的网站网址设置为https。如果我单击检查器中的http样式表链接,我将被重定向到CSS的https版本。在Chrome中,我在调用网站的http版本后得到以下信息:

  

来自原点的字体&#39; https://www.somewebsite.com&#39;已被封锁   通过跨源资源共享策略加载:否   &#39;访问控制允许来源&#39;标题出现在请求的上   资源。起源&#39; http://somewebsite.com&#39;因此是不允许的   访问。

似乎存在两个不同之处:

  • http vs https
  • www vs without www

调用网站的https版本可以正常使用。这里字体显示正确。

有没有办法让http和https版本运行同一个网站?或者我是否必须通过.htaccess开始强制https?

一些旁注:

  • 致电https://somewebsite.com会导致不安全的连接警告
  • 致电www.somewebsite.com重定向至https // www.somewebsite.com

证书是否仅对www.somewebsite.com有效?

修改

现在我在域级别使用重定向。

http://somewebsite.com现在重定向到https://www.somewebsite.com http://www.somewebsite.com重定向到https://www.somewebsite.com

目前似乎工作。

2 个答案:

答案 0 :(得分:1)

您无法混合使用http和https内容。您需要使用https发送所有内容,并使用您需要设置标头以允许访问的其他域中的资源。

See CORS

您可以在.htaccess中的原始服务器上使用它。

www.example.com

证书似乎仅适用于www。因此,您需要始终使用www和https。 example.com<form class="form-inline"> <div class="form-group"> <div class="input-daterange" id="datepicker"> <span>From:</span> <div class="input-group"> <input type="text" class="input-sm form-inline" name="start"/> <span class="input-group-addon"><i class="fa fa-calendar fa-lg" aria-hidden="true"></i></span> </div> </div> </div> <div class="form-group"> <div class="input-daterange" id="datepicker"> <span>To:</span> <div class="input-group"> <input type="text" class="input-sm form-inline" name="end"/> <span class="input-group-addon"><i class="fa fa-calendar fa-lg" aria-hidden="true"></i></span> </div> </div> </div> </form> 是两个不同的域名。 www是一个子域名。

答案 1 :(得分:1)

是的,httpd.conf <VirualHost>条目允许您同时运行https://www.example.com(在端口443上)和http://www.example.com(在端口80上)。您甚至可以将它们指向相同的物理磁盘位置(可能不是最好的主意)。

你要永远或永远不要提供“www”。 (即如果没有发送www,则重定向到“www.yoursite.com”。否则这样的事情会不断出现。

在HTML / CSS中,您可以指定“//somefile.example”以指示您正在进行绝对路径引用,但希望保持使用的相同方案。

您可以通过以下方式检查证书以查看其在Linux中的有效内容:

openssl x509 -noout -in /yourcertfile -subject -issuer -dates

您希望确保CN=(公用名)与您的网络服务器的主机名相匹配,包括任何子域(即“www”)