单域名下双项目的.htaccess路由规则配置需求
解决方案:单域名映射多目录配置
没问题,我来帮你搞定这个单域名下同时托管Angular项目和静态博客的配置需求,分两步操作就行:
1. 根目录创建新的.htaccess文件
首先在你的网站根目录(就是包含main和blog文件夹的那个目录)新建一个.htaccess文件,内容如下:
RewriteEngine On # 优先处理/blog路径的请求,直接映射到blog目录的静态文件 RewriteRule ^blog/(.*)$ /blog/$1 [L] # 所有非/blog开头的请求,全部转发到main目录的Angular项目 RewriteCond %{REQUEST_URI} !^/blog/ RewriteRule ^(.*)$ /main/$1 [L]
规则说明:
RewriteEngine On:开启URL重写功能- 第一条
RewriteRule:匹配所有以/blog/开头的请求,直接指向blog目录下对应的文件,[L]表示这是最后一条规则,匹配到就不再往下执行 - 第二条规则的
RewriteCond:排除掉/blog开头的请求,剩下的所有请求都转发到main目录
2. 调整main目录下的Angular项目.htaccess
因为现在请求是从根目录转发过来的,需要给Angular的.htaccess加上RewriteBase,确保路由解析正确。修改后的main/.htaccess内容如下:
RewriteEngine on RewriteBase /main/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 不对css、js和图片进行重写 RewriteCond %{REQUEST_URI} !\.(?:css|js|map|jpe?g|gif|png)$ [NC] RewriteRule ^ index.html [L]
调整说明:
- 添加
RewriteBase /main/:告诉Apache,这个目录下的重写规则都是基于/main/路径的,确保Angular的单页路由能正确识别转发过来的请求 - 剩下的规则保持你原来的逻辑:如果请求的不是实际存在的文件或目录,也不是静态资源(css/js/图片),就重写到index.html,让Angular处理路由
验证效果
配置完成后:
- 用户访问
yourdomain.com或者任意非/blog路径(比如yourdomain.com/about),都会自动跳转到main目录的Angular项目 - 用户访问
yourdomain.com/blog或者yourdomain.com/blog/post.html,会直接加载blog目录的静态HTML页面
记得确保你的Apache服务器已经启用了mod_rewrite模块,并且网站目录的权限允许Apache读取.htaccess文件哦~
内容的提问来源于stack exchange,提问作者Maxim
相关产品推荐
相关产品推荐

