404 Not Found:请求的页面不存在或已被删除。

当在访问网站时出现 “404 Not Found” 错误,表示服务器无法找到用户请求的页面或资源。这通常是因为页面不存在或路径错误。以下是详细的原因分析和解决方法,帮助你快速排查并解决问题。

一、404 错误的常见原因

文件或页面不存在:

请求的文件可能被删除、重命名或移动到其他目录。

路径错误:

URL 输入有误,或者服务器配置的文件路径不正确。

Web 服务器配置问题:

虚拟主机(Virtual Host)配置错误。网站根目录(Document Root)未正确指向。

URL 重写规则问题:

.htaccess 文件或 Nginx 的 try_files 配置有误。

权限问题:

文件或目录权限不足,导致服务器无法访问。

缓存问题:

浏览器或 CDN 缓存仍在请求已删除的页面。

动态页面路由问题:

PHP 或其他后端框架(如 Laravel、WordPress)的路由规则未正确匹配。二、解决方法

1. 检查文件是否存在

(1) 确认文件路径

登录服务器,进入网站的根目录,检查请求的文件是否存在。

bash

复制

cd /var/www/html # 网站根目录

ls -l

(2) 检查默认首页

检查是否有默认首页文件(如 index.html 或 index.php)。如果没有,可以创建测试文件:

bash

复制

echo "Hello World" > /var/www/html/index.html

(3) 测试文件访问

在浏览器中访问该文件,例如:http://yourdomain.com/index.html,确认是否可以正常加载。2. 检查 Web 服务器配置

(1) Apache 配置

检查虚拟主机配置文件(通常在 /etc/apache2/sites-available/ 或 /etc/httpd/conf.d/):

plaintext

复制

ServerName yourdomain.com

DocumentRoot /var/www/html

AllowOverride All

Require all granted

确保 DocumentRoot 指向正确的目录。

重启 Apache:

bash

复制

sudo systemctl restart apache2

(2) Nginx 配置

检查 Nginx 配置文件(通常在 /etc/nginx/sites-available/ 或 /etc/nginx/conf.d/):

nginx

复制

server {

listen 80;

server_name yourdomain.com;

root /var/www/html;

index index.html index.php;

location / {

try_files $uri $uri/ /index.php?$args;

}

}

确保 root 配置正确,并启用了 try_files。

测试配置并重启 Nginx:

bash

复制

sudo nginx -t

sudo systemctl restart nginx

3. 检查 URL 重写规则

(1) Apache 的 .htaccess

如果使用了 .htaccess 文件,确保文件存在且内容正确。例如,适用于 WordPress 的 .htaccess 文件:

plaintext

复制

# BEGIN WordPress

RewriteEngine On

RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

# END WordPress

确保启用了 mod_rewrite 模块:

bash

复制

sudo a2enmod rewrite

sudo systemctl restart apache2

(2) Nginx 的 try_files

确保 try_files 配置正确,例如:

nginx

复制

location / {

try_files $uri $uri/ /index.php?$args;

}

4. 检查文件和目录权限

(1) 确认权限

确保文件和目录对 Web 服务器用户(如 www-data 或 nginx)可读:

bash

复制

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

sudo chmod -R 755 /var/www/html

(2) 检查 SELinux(如果启用)

如果系统启用了 SELinux,确保目录和文件的上下文正确:

bash

复制

sudo chcon -R -t httpd_sys_content_t /var/www/html

5. 清除缓存

(1) 清理浏览器缓存

打开开发者工具(F12),然后刷新页面,选择 “清除缓存并强制刷新”。(2) 清理 CDN 缓存

如果使用了 CDN(如 Cloudflare),登录 CDN 管理后台,清除缓存。6. 检查动态页面路由

(1) 检查后端框架的路由配置

如果使用了 PHP 框架(如 Laravel、CodeIgniter),确保路由规则正确:

Laravel 的 routes/web.php:

php

复制

Route::get('/', function () {

return view('welcome');

});

(2) 检查 PHP 支持

确保服务器已安装并启用 PHP:

bash

复制

sudo systemctl status php-fpm

创建测试文件 /var/www/html/info.php,内容如下:

php

复制

phpinfo();

?>

访问 http://yourdomain.com/info.php,确认 PHP 是否正常运行。

7. 检查日志文件

(1) Apache 日志

检查 Apache 的错误日志:

bash

复制

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

(2) Nginx 日志

检查 Nginx 的错误日志:

bash

复制

sudo tail -f /var/log/nginx/error.log

(3) 系统日志

检查系统日志查看是否有相关错误:

bash

复制

sudo tail -f /var/log/syslog

三、特殊情况

1. 页面确实被删除或移动

如果页面被删除,设置 301 重定向到新的页面。例如,在 .htaccess 中添加:

plaintext

复制

Redirect 301 /old-page.html https://yourdomain.com/new-page.html

2. 404 错误页面自定义

通过自定义 404 页面优化用户体验:

Apache:

在虚拟主机配置中添加:

apache

复制

ErrorDocument 404 /404.html

Nginx:

在配置文件中添加:

nginx

复制

error_page 404 /404.html;

location = /404.html {

root /var/www/html;

}

四、总结

404 错误虽然常见,但通过以下步骤可以快速解决问题:

检查文件是否存在以及路径是否正确。确认 Web 服务器配置(虚拟主机、URL 重写规则)是否正确。检查文件权限和日志,排除权限或配置问题。如果页面已删除,设置 301 重定向或提供友好的 404 页面。通过系统性排查,可以快速定位问题并恢复正常访问。如果遇到复杂问题,可以通过日志文件定位具体原因。