我有以下通配符 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
请尝试以下操作:
%{HTTPS} !=on
由于您在端口 80 的 vHost 中,因此无需检查。该
RewriteCond
指令仅从请求的主机名中捕获子域(只能是autoconfig
或autodiscover
来自所声明的 vHost 配置)。然后使用替换字符串%1
中的反向引用来引用它。RewriteRule
或者,您可以仅显式检查条件中的
autoconfig
或autodiscover
子域:您需要在测试之前清除浏览器缓存,因为错误的 301(永久)重定向将被浏览器缓存。使用 302(临时)重定向进行测试以避免缓存问题。
我猜您必须使用旧版本的 Apache,因为您不能在新版本 Apache的指令中使用通配符
ServerName
(否则会产生歧义,因为ServerName
在某些情况下用于创建自引用 URL)。您应该只在指令中指定通配符。ServerAlias
这应该更改为: