网页抓取字体访问问题

时间:2017-06-13 06:14:34

标签: php .htaccess fonts web-scraping

我正在为我们客户的某个网站进行网页报废。一切正常。但我得到一个问题,字体不起作用。我在chrome控制台中遇到以下错误:

  

访问字体   ' https://www.example.com/fonts/fontawesome-webfont.woff?v=4.2.0'从   起源' http://www.mydomain'被CORS政策阻止:没有   '访问控制允许来源'标题出现在请求的上   资源。起源' http://www.mydomain'因此是不允许的   访问。

enter image description here

我尝试将以下代码放在http://www.mydomain .htaccess文件中,但没有运气

的.htaccess

<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Headers "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With"
    Header set Access-Control-Allow-Methods "GET, PUT, POST"
  </FilesMatch>
</IfModule>

注意:我无法进行任何更改https://www.example.com,并且我的浏览器缓存也被禁用。

网页报废的PHP代码:

$cookie = 'cookies.txt';
$timeout = 90;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT,        400); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,  $timeout );
curl_setopt($ch, CURLOPT_COOKIEJAR,       $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE,      $cookie);
curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_FILETIME, true);   
$curl_scraped_page = curl_exec($ch);    
curl_close($ch);
echo $curl_scraped_page;

修改

apache标头模块也已启用

enter image description here

2 个答案:

答案 0 :(得分:3)

要启用从服务器www.example.com上的网站访问服务器www.mydomain上的字体,服务器www.example.com需要允许来自www.mydomain的请求。对于HTTP请求(get)响应中服务器www.example.com上的响应,响应必须包含(至少)以下标题:

Access-Control-Allow-Origin: http://www.mydomain

如果您无法以这种方式配置服务器www.example.com,则还需要下载资源并将其与已删除的内容放在一起并更改链接。有关使用PHP进行HTML处理的介绍,请参阅Q&amp; A参考资源"How do you parse and process HTML/XML in PHP?"。还有现成的用于抓取的PHP库,可以为您的任务提供支持。

答案 1 :(得分:1)

这可能不适合你。

  1. Web服务器配置:您的Web服务器未配置为识别单个.htaccess。您必须在正确的位置(通常为AllowOverride)正确指定apache2.conf指令(对于Apache)。
  2. 您正在使用一个软件(例如)Wordpress,它将您的主页请求重写为http版本。
  3. 您仅使用字体资源的https版本
  4. 对于后者,您可以重写脚本以根据请求协议加载资源。 e.g:

    //maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css
    

    如果您有权访问example.com的源代码,这将允许浏览器根据请求使用http或https。如果不这样做,那么刮掉example.com的https版本比破解CORS配置要好得多。