我正在使用托管公司,如果文件 index.html
不存在,它将列出目录中的文件。它使用 ISO 8859-1 作为默认编码。
如果服务器是 Apache,有没有办法将 UTF-8 设置为默认值?
我发现它实际上使用的是 HTML 3.2 的 DOCTYPE,然后根本没有 charset
......所以它没有设置任何编码。但是有没有办法将其更改为使用 UTF-8?
AddDefaultCharset
更改为 utf-8完全没有(在 Debian 上,它在 /etc/apache2/conf-available/charset.conf
中)。
在 httpd.conf 添加(或更改,如果它已经存在):
AddDefaultCharset utf-8
将此添加到您的 .htaccess
:
IndexOptions +Charset=UTF-8
或者,如果您具有管理员权限,则可以通过编辑 httpd.conf
并添加以下内容来全局设置:
AddDefaultCharset UTF-8
(您也可以在 .htaccess
中使用 AddDefaultCharset
,但它不会以这种方式影响 Apache 生成的目录列表。)
.htaccess
也会影响所有子目录,可能 apache 会在父目录中查找任何 .htaccess
,一直到网站文件夹的根目录
.htaccess
在所有服务器上的工作方式——它也影响所有子目录。但是,不能使用 .htaccess
(AFAIK) 将 Apache 生成的目录列表页面强制为 UTF-8。
.htaccess
文件更改 serverwide 设置通常是不好的做法。当服务器设置分布在各种文件中时,错误变得更难跟踪。性能也会受到轻微影响:对于每个请求的文件,Apache 必须读取目录的 .htaccess
文件和父目录的所有 .htaccess
文件。因此,.htaccess
应仅用于目录特定设置(例如,阻止访问特定目录)或绝对不可能获得管理员权限的情况。
请参阅 AddDefaultCharset Directive、AddCharset Directive 和 this article。
AddDefaultCharset utf-8
但我不得不时不时地使用汉字。以前,我使用 hack 将中文字符翻译成 Unicode 代码并将其包含在文档中。但它只对有几个字符的页面有用。有一种更好的方法可以做到这一点:在文件名中编码字符集信息,apache 将基于此输出正确的编码头。这要归功于 conf 文件中的 AddCharset 行,例如以下行:conf/httpd.conf:
AddCharset UTF-8 .utf8
因此,如果您有一个名称以 .html.utf8 结尾的文件,apache 将提供页面,就好像它以 UTF-8 编码一样,并将相应地在标题中转储正确的字符编码指令。
在文件 .htaccess 中,添加以下行:
AddCharset utf-8 .html .css .php .txt .js
这适用于那些无法访问其服务器配置文件的人。当其他尝试失败时,这只是另一件事。
至于有关使用文件 .htaccess 的性能问题,我还没有看到这一点。我的典型页面加载时间是 150-200 毫秒,有或没有文件 .htaccess。
如果您的页面无法正确呈现,性能有什么好处?大多数共享服务器不允许用户访问配置文件,这是添加字符集的首选位置。
.htaccess
文件,请不要现在开始。有性能&为什么这是一个坏主意的行政原因(tm)
在 Ubuntu 12.04 上,取消注释 /etc/apache2/conf.d/charset
中的行 AddDefaultCharset UTF-8
就足够了。如果您使用的是上游 Apache,该文件可能名为 httpd.conf,您可能必须插入该行。
/etc/apache2/conf.d/charset
这样的文件。它是您的发行版的自定义包含文件。与任何其他不是 httpd.conf
的文件一样。
/etc/apache2/conf-enabled/charset.conf
。也没有工作。
为了完整起见,在 Ubuntu 上的 Apache2 上,您将在 conf-available 中的 charset.conf 中找到默认字符集。
取消注释该行
AddDefaultCharset UTF-8
我不确定您是否有权访问 Apache 配置 (httpd.conf),但您应该能够设置 AddDefaultCharset 指令。看:
http://httpd.apache.org/docs/2.0/mod/core.html
查找 mod_mime.c 模块并确保设置了以下内容:
AddDefaultCharset utf-8
或等效的 Apache 1.x 文档 (http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset)。
但是,这仅在“响应内容类型为 text/plain 或 text/html”时才有效。
您还应该确保您的页面也有字符集。有关更多信息,请参见:
http://www.w3.org/TR/REC-html40/charset.html
这是未经测试的,但它可能会起作用。
在您的 .htaccess 文件中,添加:
<Files ~ "\.html?$">
Header set Content-Type "text/html; charset=utf-8"
</Files>
但是,这将需要服务器上的 mod_headers。
<Files>
标记中。
如果您有 UTF-8 格式的长文件名,请提示:默认情况下,它们将被缩短为 20 个字节,因此最后一个字符可能会被“切成两半”,因此无法正确识别。然后您可能需要设置以下内容:
IndexOptions Charset=UTF-8 NameWidth=*
NameWidth
设置将防止缩短您的文件名,使其正确显示和可读。
正如其他用户已经提到的,这应该添加到 httpd.conf
或 apache2.conf
(如果您有管理员权限)或 .htaccess
(如果您没有)中。
在所有 HTML 文件都采用 UTF-8 格式并且没有内容类型的元标记的情况下,我只能通过添加两个指令来为 Apache 2.4 发送这些文件设置所需的默认值:
AddLanguage ru .html
AddCharset UTF-8 .html
将其留空:'default_charset' in WHM :::::: default_charset =''
PS:在WHM中,转到→主页→服务配置→PHP配置编辑器→单击“高级模式”→找到“default_charset”并将其留空。什么都没有,不是 UTF-8 也不是 ISO。
覆盖 Apache 默认字符集 (cf /etc/apache2/conf.d/charset)
如果这还不够,那么您可能使用 ISO 8859-1 编码字符集创建了原始文件。您必须将其转换为正确的字符集:
iconv -f ISO-8859-1 -t UTF-8 source_file.php -o new file.php
就我而言,我将此添加到文件 .htaccess 中:
AddDefaultCharset off
AddDefaultCharset windows-1252
不定期副业成功案例分享
/etc/apache2/conf-available/charset.conf
中更改此配置