如何在 Apache 中配置 UTF-8 Content-Type 标头?

如何在 Apache 中配置 UTF-8 Content-Type 标头?

我的网站有页面和其他内容采用 UTF-8 编码。对于 HTML,在元标记中设置编码没有问题。但是,我也有原始文本文件使用 UTF-8 编码的文件无法正确显示,例如显示为×。我考虑过在此类文件的开头添加字节顺序标记,但我不想这样做,因为它们并不总是得到很好的支持。我按照另一个问题,但没有任何效果。这是 HTTP 响应标头:

HTTP/1.1 200 OK
Date: Sat, 12 Aug 2017 15:41:04 GMT
Server: Apache/2.4.10 (Debian)
Last-Modified: Wed, 09 Aug 2017 19:24:33 GMT
ETag: "c04c-5565707a34966"
Accept-Ranges: bytes
Content-Length: 49228
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive

我希望看到Content-Type: text/plain; charset=utf-8。如何为这些 URI 获取可靠的 UTF-8 编码?

答案1

不会为 304 Modified 响应发送 Content-Type,因为此类响应没有内容主体。

查看 200 响应类型,您应该会看到这一点。使用 Ctrl + F5 强制刷新并生成 200 响应,而不是使用 304 响应重新验证缓存的响应。

然后,您更新了您的问题以包含 200 个响应,但我希望它总是有一个Content-Type: text/plain标题或等效内容(即使不包含字符集),但这不在您的示例中,所以不确定您是否拥有其中的所有细节?

无论如何,正确的设置方法是将以下内容添加到您的 apache 配置中:

#Set the correct Char set so don't need to set it per page.
AddDefaultCharset utf-8
#for css, js, etc.
AddCharset utf-8 .htm .html .js .css

首先 (添加默认字符集) 将设置text/plaintext/html资源的字符集。

第二 (添加字符集) 需要 mod_mime,并将根据文件扩展名设置其他类型的字符集。Javascript 文件以内容类型发送application/javascript,CSS 文件以内容类型发送,text/css因此不会被 AddDefaultCharset 设置拾取。.htm 和 .html 文件实际上不需要包含在其中,因为它们将被默认拾取,但明确指定也无妨。

答案2

我通过在“apache2.conf”中添加以下行解决了这个问题:

AddType text/plain .yml
AddDefaultCharset utf-8

写这个答案的时候已经过去了一段时间。最近的 Apache 安装可能已将 utf-8 设置为默认值。

答案3

扩展答案由@Barry-Pollard 编写,由于AddCharset需要mod_mime(或在许多配置中,默认情况下会加载mime_module),我们最好使用以下代码。使用可AddCharset确保如果因任何原因未加载,IfModuleapache 不会抛出错误。mime_module

<IfModule mime_module>
    AddCharset UTF-8 .js .css
</IfModule>

相关内容