HTAccess内部重写需求:将one.domain.com映射至指定URL
解决HTAccess内部重写而非跳转的问题
我来帮你搞定这个头疼的内部重写问题!你当前配置触发跳转的原因很明确:当RewriteRule的目标是带完整协议(http://)和域名的URL时,Apache会自动把这判定为外部跳转,而不是内部重写,所以浏览器地址栏才会变化。
正确的内部重写配置
因为one.domain.com是another.domain.com的虚拟主机别名,两个域名共享同一个文档根目录,所以我们直接用服务器根目录相对路径作为目标即可,不需要写完整域名:
RewriteEngine On RewriteCond %{HTTP_HOST} ^one\.domain\.com$ # 单页站点精确匹配根路径的话,用下面这条更精准 # RewriteRule ^$ /specific/url [L] # 如果需要匹配one.domain.com下所有路径都重写到目标页面,用这条 RewriteRule ^(.*)$ /specific/url [L]
关键说明
- 去掉目标中的
http://another.domain.com,改用/specific/url(以/开头,对应虚拟主机的文档根目录),Apache就会执行内部重写:服务器悄悄把请求转发到目标路径,浏览器完全感知不到,地址栏保持one.domain.com不变。 - 如果是严格的单页站点(只需要匹配
one.domain.com根路径),把RewriteRule的匹配规则改成^$(匹配空路径,也就是根目录)会更精准,避免不必要的重写。
额外注意事项
- 确保
/specific/url对应的资源确实存在于当前虚拟主机的文档根目录下,否则会返回404。 - 如果你的目标路径是一个PHP文件或者其他动态资源,不需要额外修改,Apache会正常处理内部重写后的请求。
内容的提问来源于stack exchange,提问作者overflaw
相关产品推荐
相关产品推荐

