Oli*_*Ash 4 domain subdomain virtualhost apache-2.2
我有一个 Apache 配置设置,其中多个虚拟主机作为子域。我刚刚购买了一个新域名,我希望对这个域名的所有请求都重定向到新域名,包括子域:
old.com > new.com
sub.old.com > sub.new.com
Run Code Online (Sandbox Code Playgroud)
有没有什么简单的方法可以在里面做到这一点httpd.conf?
我已经有一段时间没有写 RewriteRule 了,但这是我的破解:
RewriteEngine on
RewriteCond %{HTTP_HOST} (.+\.)?old\.com$ [NC]
RewriteRule (.*) http://%1new.com$1 [R]
Run Code Online (Sandbox Code Playgroud)
将它放在 old.com 的基于名称的虚拟主机中。这是思考过程,如果我有点生疏,你可以自己纠正它:
RewriteCond 分解:
RewriteCond匹配所有传入主机的前缀为“一个或多个字符后跟一个文字点”,后跟 old.com。点在括号内,因为除非提供了子域组件,否则它不会出现。?一切都包含在括号指定是可选的。(子域组件)$字符将正则表达式锚定到字符串的末尾,以防止过早的匹配异常。[NC]标志强制这不区分大小写。RewriteRule。RewriteRule 分解:
(.*)。[R]标志指定重定向操作。%1,它是由 捕获的第一个字符串RewriteCond。在这种情况下,它应该是域后缀。在 new.com 之前缺少前缀点很重要:可能没有子域组件,在这种情况下应该没有点。该点应该作为 RewriteCond 正则表达式的一部分被捕获。$1,它匹配由 捕获的第一个字符串RewriteRule。这应该是用户试图在子域下访问的 URI。如果有人指出了避免使用 RewriteRule 的解决方案,请向他们致敬:您应该尽可能将其作为您的解决方案。mod_rewrite当您缺乏由专用配置指令提供的更优雅的解决方案时。
我还应该注意,这个例子只会做非 HTTPS 重定向,并没有考虑网络服务器是否正在使用替代端口。您可能需要针对诸如此类的特殊需求进一步调整,但这是一个起点。