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

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

相关推荐
丁卯4041 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
chengooooooo1 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
人间打气筒(Ada)2 小时前
MySQL主从架构
服务器·数据库·mysql
落笔画忧愁e3 小时前
FastGPT快速将消息发送至飞书
服务器·数据库·飞书
小冷爱学习!3 小时前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
技术小齐4 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风4 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
打不了嗝 ᥬ᭄4 小时前
Linux的权限
linux
落幕4 小时前
C语言-进程
linux·运维·服务器
深度Linux4 小时前
C++程序员内功修炼——Linux C/C++编程技术汇总
linux·项目实战·c/c++