温馨提示×

为什么ubuntu apache2报错404

小樊
33
2026-08-16 20:12:18
栏目: 智能运维

Ubuntu 下 Apache2 报 404 一般不是 Apache 本身坏了,而是请求的资源没找到。下面按最常见原因 → 排查方法给你一个系统性的排查清单。


一、最常见原因(90% 都在这里)

1️⃣ 访问的 URL 路径不对

比如:

  • 你访问的是 http://ip/test.html
  • 但文件实际在 /var/www/html/test.html 不存在

✅ 检查:

ls /var/www/html

Apache 默认根目录是:

/var/www/html

2️⃣ 文件放错目录(虚拟主机问题)

如果你配置了 虚拟主机(vhost),默认路径可能已改变。

✅ 查看虚拟主机配置:

ls /etc/apache2/sites-enabled/
cat /etc/apache2/sites-enabled/000-default.conf

重点看:

DocumentRoot /var/www/html

确认你的文件在 DocumentRoot 指定的目录 下。


3️⃣ 没有启用 rewrite(访问伪静态页面)

比如访问:

http://ip/blog/123

但你是 WordPress / Laravel / ThinkPHP 等框架

✅ 检查是否开启 rewrite:

sudo a2enmod rewrite
sudo systemctl restart apache2

并确认 .htaccess 存在且允许覆盖:

<Directory /var/www/html>
    AllowOverride All
</Directory>

4️⃣ 权限问题(文件不可读)

Apache 用户是 www-data

✅ 修复权限:

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

5️⃣ 访问的是目录,但目录中没有 index 文件

比如访问:

http://ip/mydir/

但目录里没有:

index.html
index.php
index.htm

✅ 解决方式之一:

ls /var/www/html/mydir

或在配置中允许目录浏览(不推荐生产环境):

Options +Indexes

二、Apache 配置相关 404

6️⃣ 端口不对

你访问的是:

http://ip:80

但 Apache 监听的是:

sudo netstat -tlnp | grep apache

或:

sudo ss -tlnp | grep apache

7️⃣ 配置了多个虚拟主机,但 ServerName 不匹配

比如配置的是:

ServerName example.com

但你直接用 IP 访问 → 命中默认站点 → 找不到路径

✅ 排查:

apache2ctl -S

三、如何快速定位 404 原因(强烈推荐)

✅ 查看 Apache 错误日志

tail -f /var/log/apache2/error.log

访问一次页面,看日志里提示:

  • 找不到哪个文件
  • 访问了哪个路径

✅ 查看访问日志

tail -f /var/log/apache2/access.log

确认:

  • 请求确实到达了 Apache
  • 状态码是 404

四、快速自检清单(一步步来)

# 1. 服务是否运行
systemctl status apache2

# 2. 文件是否存在
ls /var/www/html

# 3. 访问的是不是正确路径
curl http://localhost

# 4. 是否开启 rewrite
apache2ctl -M | grep rewrite

# 5. 查看日志
tail -n 50 /var/log/apache2/error.log

五、如果你愿意,我可以直接帮你定位

你可以直接把下面信息贴出来(不用全贴):

  1. 访问的完整 URL
  2. 文件实际路径
  3. 虚拟主机配置
  4. /var/log/apache2/error.log 中相关报错

我可以直接告诉你是哪一条导致的 404,以及怎么改 ✅

0