使用.htaccess mod_rewrite实现附加域名到主域名的内部重写
.htaccess 配置实现方案
确保你的Apache服务已经开启mod_rewrite模块,且站点目录配置中AllowOverride设置为All(保证.htaccess规则生效),将对应规则添加到站点根目录的.htaccess文件最顶部,放在所有已有重写规则之前,避免规则优先级冲突。
方案1:Apache 2.4+ 无代理方案(推荐,性能最优)
主流虚拟主机、服务器环境默认都是Apache 2.4及以上版本,优先用这个方案,不需要额外开启代理模块,直接在请求处理阶段修改主机头,让PHP脚本识别到授权域名,全程无外部跳转,用户地址栏保持addon.com显示,请求路径、GET/POST参数完全保留。
<IfModule mod_rewrite.c> RewriteEngine On # 匹配addon.com(含www.addon.com)的所有请求,NC标记表示不区分大小写 RewriteCond %{HTTP_HOST} ^(www\.)?addon\.com$ [NC] # 强制将请求主机头修改为授权域名main.com RewriteRule .* - [E=HTTP_HOST:main.com,L] </IfModule>
方案2:兼容Apache 2.2 代理转发方案
如果你的环境是较老的Apache 2.2版本,方案1不生效时使用这个方案,需要提前确认服务器已开启mod_proxy和mod_proxy_http模块,规则会通过Apache内部代理把请求转发到main.com,同样不会改变用户浏览器地址栏。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?addon\.com$ [NC] # P标记表示内部代理转发,L标记表示停止处理后续规则 RewriteRule ^(.*)$ http://main.com/$1 [P,L] </IfModule>
如果你的站点强制启用HTTPS,把规则里的http://main.com/替换为https://main.com/即可。
注意事项
- 如果不需要适配
www.addon.com的访问,把规则里正则的(www\.)?部分删除即可,匹配条件改为^addon\.com$ - 不要给规则添加
R=301/R=302标记,否则会触发外部跳转,用户地址栏会直接显示main.com,不符合内部重写的需求 - 配置完成后清理浏览器缓存再测试,避免旧的跳转缓存影响验证结果
内容的提问来源于stack exchange,提问作者jimuty
相关产品推荐
相关产品推荐

