Centos服务器Apache VirtualHost重定向超限问题求助
问题分析与修复方案
错误根源
- REQUEST_URI 判断逻辑错误:
%{REQUEST_URI}包含完整请求路径(比如访问/myapp/时,值为/myapp/),原配置里的RewriteCond %{REQUEST_URI} ^/api/永远匹配不到实际请求,导致所有请求都进入第二个RewriteRule,引发循环重定向。 - Frontend 重写规则错误:原规则
RewriteRule . /会把所有非文件/目录的请求跳转到网站根目录,进一步加剧循环。 - 路径映射混乱: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/,确保规则中的相对路径正确映射到实际目录。
验证步骤
- 重启Apache服务:
systemctl restart httpd - 访问
http://123.456.789/myapp/,应正常加载frontend内容 - 访问
http://123.456.789/myapp/api/xxx,应正确转发到backend的api接口
内容的提问来源于stack exchange,提问作者Plastic
相关产品推荐
相关产品推荐

