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 页面。

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

相关推荐
运维&陈同学9 分钟前
【Logstash03】企业级日志分析系统ELK之Logstash 过滤 Filter 插件
大数据·运维·elk·elasticsearch·微服务·云原生·logstash
会飞的爱迪生11 分钟前
nginx反向代理+缓存
运维·nginx·缓存
有一只柴犬27 分钟前
Nginx实现接口复制
运维·nginx·lua
KXue070334 分钟前
【Linux 之一 】Linux常用命令汇总
linux·ubuntu·shell
diaya1 小时前
clickhouse 离线包安装(ubuntu)
linux·服务器·网络
她说她一如既往的爱我1 小时前
如何写一个uniapp自定义tarbar导航栏?
前端·vue.js·windows·uni-app
练小杰1 小时前
Linux 文件的特殊权限—ACL项目练习
android·linux·运维·服务器·经验分享·学习
AI青年志1 小时前
【服务器】ubuntu20.04安装cuda12.01(使用runfile安装)
linux·运维·服务器
wanhengidc1 小时前
高防服务器对于网络攻击是怎样进行防御的?
运维·服务器
叶 落2 小时前
Centos 修改 yum 源为阿里云
linux·阿里云·centos·yum