You need to enable JavaScript to run this app. DigitalOcean环境下Apache2子目录页面刷新返回404错误求助
优惠活动
大模型
产品
解决方案
定价
更多

DigitalOcean环境下Apache2子目录页面刷新返回404错误求助

问题根因

能正常跳转访问子路径、刷新就触发404,是典型的单页应用路由适配问题。这类应用的前端路由由浏览器端实现,服务器磁盘上并不存在/foo/bar对应的实际文件。当前的Apache默认配置没有配置请求重写逻辑,遇到不存在的文件路径就直接抛出404,不会把这类请求转发到应用的入口HTML文件。

修复步骤

  1. 启用Apache重写模块,执行命令:
    sudo a2enmod rewrite
  2. 编辑站点配置文件/etc/apache2/sites-available/000-default.conf,替换原有内容为如下完整配置:
    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
    
        <Directory /var/www/html>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
            
            # 核心重写逻辑
            RewriteEngine On
            # 不拦截实际存在的文件、目录请求
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            # 所有匹配上述条件的请求,统一转发到应用入口
            RewriteRule ^(.*)$ /index.html [L]
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
    这种把重写规则直接写在Vhost配置块的方式,比依赖目录下的.htaccess文件稳定性更高,也不需要放开AllowOverride All带来的额外安全风险。
  3. 校验配置语法:
    执行sudo apache2ctl configtest,终端返回Syntax OK即表示配置无语法问题,否则根据提示的行号修正配置错误。
  4. 重启Apache让配置生效:
    sudo systemctl restart apache2

注意事项

  • 如果Web应用没有部署在域名根路径,而是挂在类似example.com/myapp/的子路径下,需要把重写跳转的目标路径对应调整为/myapp/index.html,避免路由定位错位。
  • 如果应用的入口文件不是默认的index.html,把重写规则里的目标路径改成对应的入口文件名即可。
  • 配置生效后如果仍有404问题,直接查看/var/log/apache2/error.log的最新报错,通常是目录读权限不足、规则路径不匹配导致的。

内容的提问来源于stack exchange,提问作者smul.hn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 04:15:08