Virtualhost
Apache2 萬用字元別名
我有以下萬用字元 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
指令僅從請求的主機名中擷取子域(只能是autoconfig
或autodiscover
來自所聲明的 vHost 配置)。然後使用替換字元串%1
中的反向引用來引用它。RewriteRule
或者,您可以僅顯式檢查條件中的
autoconfig
或autodiscover
子域:RewriteCond %{HTTP_HOST} ^(autoconfig|autodiscover)\.
您需要在測試之前清除瀏覽器記憶體,因為錯誤的 301(永久)重定向將被瀏覽器記憶體。使用 302(臨時)重定向進行測試以避免記憶體問題。
ServerName autodiscover.*.*
我猜您必須使用舊版本的 Apache,因為您不能在新版本 Apache的指令中使用萬用字元
ServerName
(否則會產生歧義,因為ServerName
在某些情況下用於創建自引用 URL)。您應該只在指令中指定萬用字元。ServerAlias
這應該更改為:
ServerName autodiscover.something.something ServerAlias autodiscover.*.* ServerAlias autoconfig.*.*