Apache2 通配符别名

Apache2 通配符别名

我有以下通配符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,但前提是子域部分是autoconfigautodiscover

答案1

请尝试以下操作:

RewriteCond %{HTTP_HOST} ^([^.]+)
RewriteRule ^/(.*) https://%1.maindomain.de/$1 [R=301,L]

%{HTTPS} !=on由于您位于端口 80 的 vHost 中,因此无需检查。

RewriteCond指令仅从请求的主机名(只能是autoconfig或来自指定的 vHost 配置)捕获子域autodiscover。然后使用%1RewriteRule 代换细绳。

或者,您可以明确检查条件中的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.*.*

相关内容