Virtualhost

Apache2 萬用字元別名

  • February 5, 2020

我有以下萬用字元 vHost:

<VirtualHost *:80>
   ServerAdmin hostmaster@example.de
   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

請嘗試以下操作:

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

%{HTTPS} !=on由於您在埠 80 的 vHost 中,因此無需檢查。

RewriteCond指令僅從請求的主機名中擷取子域(只能是autoconfigautodiscover來自所聲明的 vHost 配置)。然後使用替換字元串%1中的反向引用來引用它。RewriteRule

或者,您可以僅顯式檢查條件中的autoconfigautodiscover子域:

RewriteCond %{HTTP_HOST} ^(autoconfig|autodiscover)\.

您需要在測試之前清除瀏覽器記憶體,因為錯誤的 301(永久)重定向將被瀏覽器記憶體。使用 302(臨時)重定向進行測試以避免記憶體問題。

ServerName autodiscover.*.*

我猜您必須使用舊版本的 Apache,因為您不能在新版本 Apache的指令中使用萬用字元ServerName(否則會產生歧義,因為ServerName在某些情況下用於創建自引用 URL)。您應該只在指令中指定萬用字元。ServerAlias

這應該更改為:

ServerName autodiscover.something.something
ServerAlias autodiscover.*.*
ServerAlias autoconfig.*.*

引用自:https://serverfault.com/questions/1001935