You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Centos服务器Apache VirtualHost重定向超限问题求助

问题分析与修复方案

错误根源

  1. REQUEST_URI 判断逻辑错误:%{REQUEST_URI} 包含完整请求路径(比如访问/myapp/时,值为/myapp/),原配置里的RewriteCond %{REQUEST_URI} ^/api/永远匹配不到实际请求,导致所有请求都进入第二个RewriteRule,引发循环重定向。
  2. Frontend 重写规则错误:原规则RewriteRule . /会把所有非文件/目录的请求跳转到网站根目录,进一步加剧循环。
  3. 路径映射混乱:RewriteBase与规则中的路径没有对应,导致实际文件路径匹配错误。

修复后的完整配置

<VirtualHost *:80>
    DocumentRoot /var/www/html

    # 处理 Frontend 路由(适配单页应用)
    <Directory /var/www/html/myapp/frontend>
        RewriteEngine On
        # 直接放行 index.html
        RewriteRule ^index\.html$ - [L]
        # 非文件/目录请求转发到 index.html
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . index.html [L]
    </Directory>

    # 处理 /myapp 下的路由分发
    <Directory /var/www/html/myapp>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        RewriteEngine On
        RewriteBase /myapp/

        # 匹配含 api 的请求,转发到 backend 接口目录
        RewriteCond %{REQUEST_URI} /api/ [NC]
        RewriteRule ^api/(.*)$ backend/public/api/$1 [L]

        # 其他请求全部转发到 frontend
        RewriteRule ^(.*)$ frontend/$1 [L]
    </Directory>
</VirtualHost>

关键修改说明

  • 缩小规则作用范围:把路由分发规则从/var/www/html调整到/var/www/html/myapp,避免影响其他站点,同时让路径匹配更精准。
  • 修正API请求匹配:用%{REQUEST_URI} /api/判断是否包含api路径,规则改为^api/(.*)$,直接映射到backend/public/api/$1,确保路径正确。
  • 修复Frontend路由:把跳转到根目录的规则改为转发到当前目录的index.html,适配单页应用路由需求,避免跨目录跳转。
  • 调整RewriteBase:设置为/myapp/,确保规则中的相对路径正确映射到实际目录。

验证步骤

  1. 重启Apache服务:systemctl restart httpd
  2. 访问http://123.456.789/myapp/,应正常加载frontend内容
  3. 访问http://123.456.789/myapp/api/xxx,应正确转发到backend的api接口

内容的提问来源于stack exchange,提问作者Plastic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:18:10