首页 > 解决方案 > 如何在 htaccess 中重写子域

问题描述

我试图简化用户对子域复杂性的感知,所以我想屏蔽子域。

我的目标如下:

当用户试图到达这里

blog.example.com/blog/whatever

我想将子域屏蔽为

example.com/blog/whatever

提供相同的内容,但隐藏了子域。

我尝试了以下但没有成功。

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^https://blog\.example.com\/blog [NC]
  RewriteRule ^(.*)$ http://example.com/blog/$1 [R=301,L]
</IfModule>

更新:重写模块已启用

标签: .htaccessmod-rewriteurl-rewriting

解决方案


RewriteCond %{HTTP_HOST} ^https://blog\.example.com\/blog [NC]
RewriteRule ^(.*)$ http://example.com/blog/$1 [R=301,L]

HTTPHost标头(即HTTP_HOST服务器变量的值)仅包含主机名,即。blog.example.com. 它不包含完整的绝对 URL。

所以,你的规则应该是这样的:

RewriteCond %{HTTP_HOST} ^blog\.example\.com [NC]
RewriteRule ^blog($|/) https://example.com%{REQUEST_URI} [R=301,L]

这匹配 URL 路径/blog/blog/<whatever>(但不/blog<something>)并重定向到example.com(+ HTTPS) 处的相同 URL 路径。REQUEST_URI服务器变量包含以斜杠开头的根相对 URL 路径。

您正在重定向到 HTTP,但我认为这一定是 HTTPS?

您应该在测试之前清除浏览器缓存,并首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。


推荐阅读