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

Apache配置实现/api路由指向backend其余指向frontend子目录

问题修复方案

你原有重写规则存在两个核心语法/逻辑错误:

  1. 前端转发部分仅写了RewriteCond条件判断,没有配套的RewriteRule执行转发,规则完全不生效
  2. 没有处理前后端静态资源的直接访问、以及框架路由的fallback逻辑,即使转发成功也会出现静态资源404、路由失效问题

前置要求

  • 确保Apache已经开启mod_rewrite模块
  • 虚拟主机的DocumentRoot指向你目录结构中的www根目录
  • 如果使用.htaccess方式配置,需要给www目录配置AllowOverride All权限

正确重写规则

将以下规则替换你原有规则即可,规则兼容后端MVC框架、前端SPA单页应用的路由需求:

RewriteEngine On

# 跳过已经指向前后端public目录的请求,避免重写死循环
RewriteRule ^frontend/public/ - [L,NC]
RewriteRule ^backend/public/ - [L,NC]

# 匹配/api前缀请求,转发到后端public目录
RewriteRule ^api(/.*)?$ /backend/public$1 [L,NC]

# 后端路由fallback:静态文件/目录不存在时,转发到后端入口文件(适配Laravel/ThinkPHP等后端框架)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^backend/public(/.*)?$ /backend/public/index.php [L]

# 其余所有请求转发到前端public目录
RewriteRule ^(.*)$ /frontend/public/$1 [L]

# 前端路由fallback:静态文件/目录不存在时,转发到前端入口(适配Vue/React等SPA框架history模式路由)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^frontend/public(/.*)?$ /frontend/public/index.html [L]

效果验证

规则生效后符合你的预期:

  • 访问domain.com/foo:自动映射到www/frontend/public目录下的对应资源,不存在则走前端路由
  • 访问domain.com/api/foo:自动映射到www/backend/public目录下的对应资源,不存在则走后端路由
  • 前后端的静态资源(js/css/图片/上传文件)会直接返回,不需要额外配置路径前缀

如果你的站点是纯静态站点,没有使用前后端框架路由,可以删除两段fallback相关的规则,仅保留路径转发部分即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:54:33