具有多個子網域的 Apache AliasMatch

具有多個子網域的 Apache AliasMatch

我有以下虛擬主機:

<VirtualHost *:443>
  ServerName article.example.com
  AliasMatch "^/(.*)" "/var/www/html/article.php"
 </VirtualHost>
 <VirtualHost *:443>
  ServerName company.example.com
  AliasMatch "^/(.*)" "/var/www/html/company.php"
 </VirtualHost>

我想將所有內容都放在一個虛擬主機下,如下所示:

 <VirtualHost *:443>
  ServerName example.com
  ServerAlias *.example.*
  AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
 </VirtualHost>

這可能嗎?我必須使用mod重寫嗎?我想將某些子網域對應到我的伺服器上的相關檔案而不更改 url。我想article.example.com/test-article映射到article.php.

答案1

AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"

AliasMatch指令與請求的 URL 路徑相符(正如您在第一個範例中所做的那樣),而不是主機名稱(正如您在這裡嘗試做的那樣),所以這樣的事情將不匹配。

正如您所建議的,顯而易見的選擇是 mod_rewrite 。例如:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(article|company)\.
RewriteRule ^ /var/www/html/%1.php [L]

其中%1反向引用包含前面捕獲的子模式的匹配項條件模式

如果/var/www/html是文檔根目錄,那麼可以從代換字串,重寫為文檔根相對 URL 路徑而不是絕對文件路徑。 IE。簡單地/%1.php

您可以使其更加通用,並重寫對任何子網域的請求,其中該子網域作為.php文件存在於文件根目錄中。例如:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]

相關內容