我有以下通配符vHost:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName autodiscover.*.*
ServerAlias autoconfig.*.*
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>
但是我的 RewriteRule 是错误的。
例如:
autoconfig.testdomain.de
被映射到https://autoconfig.testdomain.de
我想要的是:
autoconfig.*.*
被映射到https://autoconfig.maindomain.de
autodiscover.*.*
被映射到https://autodiscover.maindomain.de
我只想将 中的子域部分解析%{HTTP_HOST}
为subdomain.example.de
,但前提是子域部分是autoconfig
或autodiscover
答案1
请尝试以下操作:
RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteRule ^/(.*) https://%1.maindomain.de/$1 [R=301,L]
%{HTTPS} !=on
由于您位于端口 80 的 vHost 中,因此无需检查。
该RewriteCond
指令仅从请求的主机名(只能是autoconfig
或来自指定的 vHost 配置)捕获子域autodiscover
。然后使用%1
RewriteRule
代换细绳。
或者,您可以明确检查条件中的autoconfig
或子域:autodiscover
RewriteCond %{HTTP_HOST} ^(autoconfig|autodiscover)\.
您需要在测试之前清除浏览器缓存,因为错误的 301(永久)重定向将被浏览器缓存。使用 302(临时)重定向进行测试可避免缓存问题。
ServerName autodiscover.*.*
我猜你一定是在用旧版本的 Apache,因为你不能使用通配符在ServerName
较新版本的 Apache 的指令中(否则会产生歧义,因为ServerName
在某些情况下会使用来创建自引用 URL)。您应该只指定通配符在ServerAlias
指令中。
这应该改为类似这样的:
ServerName autodiscover.something.something
ServerAlias autodiscover.*.*
ServerAlias autoconfig.*.*