如何在.htaccess中实现子域名URL掩码(example.com/app映射)
解决example.com/app路径代理到app.example.com的URL掩码问题
你的原规则存在几个关键问题:
%{HTTP_HOST}仅匹配请求的主机名(比如example.com),不能包含路径,所以原条件完全不生效- 域名拼写错误:
exmaple.com应该是example.com - 没有匹配
/app路径,也没把后续路径传递到子域名
下面是正确的.htaccess配置,前提是你的Apache服务器已经启用了mod_rewrite和mod_proxy(包括mod_proxy_http)模块:
RewriteEngine On # 仅处理example.com的请求 RewriteCond %{HTTP_HOST} ^example\.com$ [NC] # 匹配/app开头的路径,将后续内容代理到子域名对应路径 RewriteRule ^app/(.*)$ https://app.example.com/$1 [P,L]
规则解释
[NC]:不区分主机名的大小写,兼容Example.com这类大小写混合的请求^app/(.*)$:匹配所有以/app/开头的路径,$1会捕获/app/之后的所有内容(比如请求example.com/app/page,$1就是page)[P]:启用代理转发,浏览器地址栏会保持example.com/app/xxx,不会跳转到子域名(实现URL掩码)[L]:执行完这条规则后停止后续规则匹配,避免冲突
额外优化
如果需要支持不带尾部斜杠的/app请求(比如example.com/app),可以调整规则为:
RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com$ [NC] RewriteRule ^app(/.*)?$ https://app.example.com/$1 [P,L,NE]
^app(/.*)?$:匹配/app或/app/xxx两种格式[NE]:防止特殊字符被转义,确保路径中的参数、特殊符号能正确传递到子域名
注意事项
- 必须确认服务器已启用
mod_proxy和mod_proxy_http模块,否则[P]标志会失效 - 确保当前服务器能正常访问
app.example.com,否则代理请求会失败 - 如果子域名有自动重定向(比如强制HTTPS、添加尾部斜杠),可能需要额外处理避免地址栏跳转暴露真实域名
内容的提问来源于stack exchange,提问作者Chad Davis
相关产品推荐
相关产品推荐

