Apache2 出现乱码,通常不是 Apache 本身坏了,而是字符编码配置或内容编码不一致导致的。下面按「最常见 → 较少见」的顺序给你一套排查与解决办法。
编辑 Apache 配置文件:
sudo vim /etc/apache2/conf-available/charset.conf
确保有以下内容(没有就加上):
AddDefaultCharset UTF-8
启用并重启:
sudo a2enconf charset
sudo systemctl restart apache2
✅ 适用于 HTML / PHP 页面乱码
即使服务器声明 UTF-8,文件不是 UTF-8 也会乱码
检查文件编码:
file -i index.html
如果不是 UTF-8,转换:
iconv -f GBK -t UTF-8 index.html -o index.utf8.html
或用编辑器(VS Code / vim)另存为 UTF-8 无 BOM
<meta charset="UTF-8">
或老写法:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
⚠️ 这个必须放在 <head> 最前面
PHP 文件保存为 UTF-8
在代码最前面加:
header('Content-Type:text/html; charset=utf-8');
并确保 没有在 header 之前输出任何内容
如果你访问的是目录列表(没有 index 文件):
IndexOptions +Charset=UTF-8
放在虚拟主机或目录配置中。
AcceptPathInfo On
并确保文件系统编码是 UTF-8(Linux 一般没问题)
如果是 Apache 日志乱码:
locale
确保是:
LANG=en_US.UTF-8
不是 C 或 POSIX
请补充:
apache2 -v)我可以直接给你精确配置。