如何在.htaccess中配置重写规则实现子域名隐藏
原有配置错误原因
%{HTTP_HOST}变量仅包含请求的域名信息,不会携带协议、请求路径,你写的匹配规则^https://blog\.example\.com\/blog完全无法命中目标请求- 重写规则中
$1已经捕获了完整的请求路径,额外拼接/blog前缀会导致跳转后路径重复,出现/blog/blog/xxx的错误路径
正确配置
将以下配置写入blog.example.com站点的虚拟主机配置文件,或站点根目录下的.htaccess文件即可实现你要的地址栏跳转隐藏子域名的效果:
<IfModule mod_rewrite.c> RewriteEngine On # 匹配所有访问blog.example.com域名的请求 RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC] # 匹配/blog开头的路径,保持原协议跳转至主域名的对应路径 RewriteRule ^blog/(.*)$ %{REQUEST_SCHEME}://example.com/blog/$1 [R=301,L] </IfModule>
注意事项
- 配置修改后需重启Apache服务生效,调试阶段建议先将
R=301改为R=302临时跳转,避免浏览器缓存旧的301规则影响调试 - 需确保
example.com站点的/blog路径已部署对应站点内容,跳转后才能正常访问 - 若你需要地址栏不变、仅内部代理拉取子域名内容,可以使用
P标记配合mod_proxy模块,规则改为:
该配置需放在RewriteRule ^blog/(.*)$ http://blog.example.com/blog/$1 [P,L]example.com站点的配置中使用。
内容的提问来源于stack exchange,提问作者Imnl
相关产品推荐
相关产品推荐

