同Apache服务器下如何通过.htaccess RewriteRule实现跨域名请求映射?
实现完全可行,两种适配托管式Apache的无侵入方案
完全不需要调整原有business.com的配置,所有逻辑都可以在mystore.com对应的独立根目录的.htaccess中实现,全程对终端用户透明,不会产生对外跳转,完全满足你要的“mystore.com下任意路径返回business.com/mystore对应路径资源”的需求。
方案一:跨目录内部重写(零业务代码改动,首选方案)
这个方案完全复用已经跑通的现有店铺逻辑,不需要依赖额外的Apache模块,适配90%以上的共享托管环境。
你现有的店铺访问逻辑本来就是通过传入store参数调用store目录下的PHP脚本完成的,只需要在独立域名的请求进来时,自动固定传入store=mystore参数,直接调用business.com根目录下对应的PHP脚本即可。
具体操作:
- 进入mystore.com的文档根目录(也就是
/www/mystore/html),创建/编辑.htaccess文件,写入如下规则:
# 开启重写引擎 RewriteEngine On # 允许同服务器跨目录访问(大部分托管默认开启,显式声明避免规则被拦截) RewriteOptions AllowAnyPath # 匹配根路径请求:访问 mystore.com/ 时,等价于原来访问 business.com/mystore RewriteRule ^/?$ /www/business/html/store/index.php?store=mystore [QSA,L] # 匹配搜索路径请求:访问 mystore.com/search 时,等价于原来访问 business.com/mystore/buscar RewriteRule ^search/?$ /www/business/html/store/search.php?store=mystore [QSA,L] # 匹配商品目录路径请求:访问 mystore.com/catalogue/任意子路径 时,等价于原来访问 business.com/mystore/catalogue/任意子路径 # 自动捕获catalogue后面的所有路径,作为参数传给现有catalogue脚本,完全匹配 /catalogue/nice-product/384 这类子路径场景 RewriteRule ^catalogue(.*)$ /www/business/html/store/catalogue.php?store=mystore&subpath=$1 [QSA,L] # 匹配静态资源请求:自动映射原有店铺存放的静态文件,比如图片、CSS、JS RewriteRule ^(assets|uploads|images)/(.*)$ /www/business/html/store/assets/mystore/$1/$2 [QSA,L]
- 规则写完不需要重启Apache,
.htaccess的改动会自动生效。
这个方案的优势:
- 完全不改动原有business.com下的任何配置和代码,老的
business.com/mystore/*访问路径完全不受影响 - 所有请求都在服务器内部完成解析,没有外部跳转开销,响应速度和直接访问原有地址完全一致
- 地址栏会始终保留mystore.com的路径,给用户独立域名的访问体验
方案二:内部反向代理(适合路径逻辑完全强绑定的场景)
如果现有代码存在依赖完整URL路径判断的逻辑,跨目录重写无法完全模拟原有访问路径的场景,可以借助Apache的反向代理模块实现完全的路径透传。
具体配置同样在/www/mystore/html/.htaccess中写入:
RewriteEngine On # 把所有mystore.com收到的请求,内部转发到business.com下mystore店铺的对应路径 RewriteRule ^(.*)$ http://business.com/mystore/$1 [P,L]
使用这个方案需要确认托管环境已经开启mod_proxy、mod_proxy_http模块,绝大多数商用共享托管都默认开启这两个模块。
这个方案的特点:
- 服务器会在内部自动请求本地business.com的对应资源路径,把返回内容原样透传给用户,路径结构和原有business.com下的店铺访问完全一致,不会出现参数传递的偏差
- 因为是请求本地服务器的内网地址,没有外部网络传输的额外延迟,性能和本地读文件没有区别
实操注意事项
- 不要使用外部跳转规则:类似
Redirect 301 / https://business.com/mystore/这类规则会让用户访问mystore.com时直接跳转到business.com地址,完全失去独立域名的体验,绝对不要用 - 一定要加
QSA标记:确保用户在mystore.com下附带的GET查询参数可以完整传递给后端脚本,不会被重写规则覆盖 - 如果遇到跨目录权限报错,可以联系托管商在mystore.com的站点配置里开放对
/www/business/html目录的读权限,因为两个域名属于同一服务器账号,一般不需要额外申请
内容的提问来源于stack exchange,提问作者Andres SK
相关产品推荐
相关产品推荐

