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

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


一、404 错误的常见原因

  1. 文件或页面不存在

    • 请求的文件可能被删除、重命名或移动到其他目录。
  2. 路径错误

    • URL 输入有误,或者服务器配置的文件路径不正确。
  3. Web 服务器配置问题

    • 虚拟主机(Virtual Host)配置错误。
    • 网站根目录(Document Root)未正确指向。
  4. URL 重写规则问题

    • .htaccess 文件或 Nginx 的 try_files 配置有误。
  5. 权限问题

    • 文件或目录权限不足,导致服务器无法访问。
  6. 缓存问题

    • 浏览器或 CDN 缓存仍在请求已删除的页面。
  7. 动态页面路由问题

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

二、解决方法

1. 检查文件是否存在

(1) 确认文件路径
  • 登录服务器,进入网站的根目录,检查请求的文件是否存在。 bash

    复制

    复制代码
    cd /var/www/html  # 网站根目录
    ls -l
(2) 检查默认首页
  • 检查是否有默认首页文件(如 index.htmlindex.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

    复制

    复制代码
    <VirtualHost *:80>
        ServerName yourdomain.com
        DocumentRoot /var/www/html
        <Directory /var/www/html>
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
  • 确保 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
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # 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-datanginx)可读:

    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

    复制

    复制代码
    <?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 错误虽然常见,但通过以下步骤可以快速解决问题:

  1. 检查文件是否存在以及路径是否正确。
  2. 确认 Web 服务器配置(虚拟主机、URL 重写规则)是否正确。
  3. 检查文件权限和日志,排除权限或配置问题。
  4. 如果页面已删除,设置 301 重定向或提供友好的 404 页面。

通过系统性排查,可以快速定位问题并恢复正常访问。如果遇到复杂问题,可以通过日志文件定位具体原因。

相关推荐
SPC的存折3 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧4 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩4 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw7774 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
运维有小邓@5 小时前
什么是重放攻击?如何避免成为受害者?
运维·网络·安全
我是伪码农5 小时前
外卖餐具智能推荐
linux·服务器·前端
透明的玻璃杯6 小时前
window环境下使用类似tail的命令跟踪滚动的日志
windows
汤愈韬6 小时前
下一代防火墙通用原理
运维·服务器·网络·security
私人珍藏库6 小时前
【windows】跨平台 Android 刷机Root工具箱
android·windows·工具·刷机·软件·多功能
皮皮林5516 小时前
强烈建议大家使用 Linux 做开发?
linux