apache实现前后端分离需路径级精准匹配:仅重写/api/开头请求至api.php,排除真实文件和目录;静态资源直供,spa fallback用rewriterule ^.*$ template/index.html [l];生产环境推荐proxypass反向代理后端。

Apache 中 URL 重写实现前后端分离项目的 API 统一转发,核心是**路径级精准匹配 + 静态资源与动态接口严格分离**。不能把所有请求都甩给后端(如 RewriteRule ^(.*)$ api.php),否则静态文件(JS/CSS/图片)会被错误解析,导致 500、乱码或 404。
只代理 /api/ 开头的请求
前端构建产物(如 Vue/React 的 dist)放在 Apache 根目录下,纯静态访问;后端接口统一走 /api/ 前缀,由重写规则定向到真实服务。
- 在站点根目录的
.htaccess中启用重写:RewriteEngine On - 添加精准路由规则(必须放在其他泛匹配规则之前):
RewriteRule ^api/(.*)$ api.php?path=$1 [QSA,L] - 这条规则会把
/api/login→ 转给api.php?path=login,后端可据此分发;同时/static/logo.png、/index.html等完全绕过重写,直接由 Apache 返回
避免静态资源被误重写
常见陷阱是没排除已存在的文件和目录,导致图片、CSS 被强行重写进 PHP 入口。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 加两行前置条件,确保只重写“不存在的路径”:
RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-d - 再配合根路径处理(如 SPA 的 fallback):
RewriteRule ^.*$ template/index.html [L]—— 这条仅对非文件/非目录的请求生效,不影响真实静态资源 - 务必禁用
MultiViews(防止 Apache 自动匹配 .php 文件造成干扰):Options -MultiViews
生产环境更推荐反向代理方式
如果后端是独立进程(如 Spring Boot 运行在 8080 端口),用 mod_proxy 比重写更清晰、更安全。
- 启用模块:
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.so - 在
httpd.conf或虚拟主机配置中添加:ProxyPass /api/ http://127.0.0.1:8080/api/ProxyPassReverse /api/ http://127.0.0.1:8080/api/ - 注意末尾斜杠:两边都要有,才能正确剥离前缀,让后端收到的是
/login而不是/api/login
宝塔或 Nginx 用户注意路径一致性
若用宝塔面板,别直接「整站反代」,而应在网站配置文件里手动加 location 块:
location ^~ /api/ { proxy_pass http://127.0.0.1:8080/; }- 前端构建时需设
publicPath: "/"(根部署)或publicPath: "/app1/"(子目录),否则 JS/CSS 路径会 404 - 后端服务监听地址必须是
127.0.0.1:8080,禁止绑定0.0.0.0暴露外网端口
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










