apache url重写不直接实现前后端分离,而是支撑其运行:通过兜底规则使前端history路由刷新不报404,再配合proxy模块将/api请求反向代理至后端服务,实现跨域规避与统一入口。

Apache URL 重写本身不直接“实现”前后端分离,而是为分离架构提供关键支撑:让前端单页应用(如 Vue/React)的 HTML5 History 路由能正常回退、刷新不报 404;同时把 API 请求精准代理到后端服务。核心是两件事——前端路由兜底和后端接口代理,不是靠重写把前后端代码混在一起。
前端路由兜底:解决刷新 404
Vue Router 或 React Router 使用 history 模式时,访问 /user/profile 这类路径,实际文件并不存在。Apache 需捕获所有非静态资源请求,统一返回 index.html,由前端 JS 路由接管。
- 确保
mod_rewrite已启用(LoadModule rewrite_module modules/mod_rewrite.so) - 在站点根目录或
<directory></directory>块中开启覆盖权限:AllowOverride All - 在
.htaccess中写入标准兜底规则:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
注意:RewriteBase / 要与你的部署路径一致(如部署在子目录 /admin,则写 RewriteBase /admin/)。
后端接口代理:把 API 请求转给真实服务
前后端分离后,前端域名(如 https://web.example.com)和后端 API(如 http://localhost:8080)通常不同源。用 Apache 做反向代理,避免浏览器跨域限制,也便于统一 HTTPS 和鉴权。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 启用代理模块:
LoadModule proxy_module modules/mod_proxy.so和LoadModule proxy_http_module modules/mod_proxy_http.so - 在
<virtualhost></virtualhost>或全局配置中添加代理规则,例如:
ProxyPassReverse /api/ http://127.0.0.1:8080/
这样,前端请求 /api/users 会被 Apache 转发到 http://127.0.0.1:8080/users,浏览器仍显示原域名,无跨域问题。路径前缀(如 /api/)必须与前端 axios 默认 baseURL 一致。
区分静态资源与动态请求
不要让重写规则干扰真实存在的文件(JS/CSS/图片)。上面的兜底规则已用 !-f 和 !-d 排除,但需确认静态资源路径正确:
- 前端构建产物(如
dist/)应放在 Apache DocumentRoot 下 - 确保
favicon.ico、robots.txt等独立文件可被直接访问,不被兜底规则拦截 - 若使用子目录部署(如
/app/),所有资源引用和路由 base 都要同步调整
调试与验证要点
规则写完不生效?常见卡点:
- 修改配置后必须重启 Apache(
sudo systemctl restart apache2或httpd -k restart) - 检查 Apache 错误日志(
/var/log/apache2/error.log),搜索rewrite相关报错 - 用
curl -I http://your-domain/some-path测试响应头,排除浏览器缓存干扰 - 确认
.htaccess文件权限可读,且所在目录允许覆盖(AllowOverride All)










