所有资产

所有资产

我已将这些规则添加到mime.types

application/x-font-ttf                ttf;
font/opentype                         otf;
application/vnd.ms-fontobject         eot;
font/x-woff                           woff;

现在 Content-Type 标头已正确设置。我现在唯一的问题是 Firefox 需要 Access-Control-Allow-Origin。我在 Google 上搜索了此内容回答并将其添加到我的服务器指令中:

location ~* \.(eot|ttf|woff)$ {
    add_header Access-Control-Allow-Origin *;
}

但现在我的字体根本无法使用。

相反,error.log报告称它正尝试在本地文件系统上打开它们。

2010/10/02 22:20:21 [错误] 1641#0:*15 open()“/usr/local/nginx/html/fonts/mgopenmodernabold-webfont.woff”失败(2:没有此文件或目录),客户端:69.164.216.142,服务器:static.arounds.org,请求:“HEAD /fonts/mgopenmodernabold-webfont.woff HTTP/1.1”,主机:“static.arounds.org”

有什么想法可以解决语法问题吗?我是否需要明确添加一条规则,说明不要尝试在本地打开它,或者其他什么?

编辑:我认为问题在于我现在为 2 个不同的位置提供服务。 而我应该在主位置内进行正则表达式检查,然后提供标头。

答案1

哇喔!明白了。。这几乎就是我在编辑时所怀疑的,我基本上不得不在我的鞋底中执行正则表达式文件名检查,location {}而不是制作替代文件。

    location / { 
            root /www/site.org/public/;
            index index.html;

            if ($request_filename ~* ^.*?/([^/]*?)$)
            {
                set $filename $1; 
            }

            if ($filename ~* ^.*?\.(eot)|(ttf)|(woff)$){
                add_header Access-Control-Allow-Origin *;
            }
    }

答案2

location ~* \.(eot|ttf|woff)$ {
    add_header Access-Control-Allow-Origin *;
}

如果您有其他字体扩展,请密切注意添加它们。现在常见的有:eot|ttf|woff|woff2|svg,因此您应该像这样调整:

location ~* \.(eot|ttf|woff|woff2|svg)$ {
    add_header Access-Control-Allow-Origin *;
}

答案3

所有资产

这将使所有资产正常工作。root如果您想定义新位置,可以添加

location ~ \.(js|css|png|jpg|jpeg|gif|ico|html|woff|woff2|ttf|svg|eot|otf)$ {
    add_header "Access-Control-Allow-Origin" "*";
    expires 1M;
    access_log off;
    add_header Cache-Control "public";
}

答案4

另一个解决方案:将所有字体放入,例如,static/fonts并添加

location /static/fonts  {
    add_header "Access-Control-Allow-Origin" *;
    alias /var/www/mysite/static/fonts;
}

相关内容