Apache-2.4

apache 2.4中子域的萬用字元子域

  • May 7, 2020

目前我已經使用如下萬用字元子域配置:

<VirtualHost *:80>
   ServerAlias *.domain
   ErrorLog /tmp/error.log
   CustomLog /tmp/access.log combined
   VirtualDocumentRoot /var/www/%1/public
<Directory "/var/www">
   DirectoryIndex index.php
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>
</VirtualHost>

但如果我輸入 sub.sub.domain 將返回預設虛擬主機。如何配置到主/根域的路徑?我在conf下嘗試過,但仍然沒有奏效:

<VirtualHost *:80>
   ServerAlias *.*.domain
   ErrorLog /tmp/error.log
   CustomLog /tmp/access.log combined
   VirtualDocumentRoot /var/www/%2/public
<Directory "/var/www">
   DirectoryIndex index.php
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>
</VirtualHost>

我將 %2 更改為 %1 仍然不起作用。

什麼是正確的語法?

經過幾個小時的解決方法,實際上上面的程式碼有正確的語法,但我只是把它放在錯誤的位置順序。所以正確的答案是把第二個放在第一個上面。

下面是完整的配置範例:

<VirtualHost *:80>
   ServerAlias *.*.domain
   ErrorLog /tmp/error.log
   CustomLog /tmp/access.log combined
   VirtualDocumentRoot /var/www/%2/public
<Directory "/var/www">
   DirectoryIndex index.php
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>
</VirtualHost>

<VirtualHost *:80>
   ServerAlias *.domain
   ErrorLog /tmp/error.log
   CustomLog /tmp/access.log combined
   VirtualDocumentRoot /var/www/%1/public
<Directory "/var/www">
   DirectoryIndex index.php
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>
</VirtualHost>

Apache 通過從頂部升序跳過相同的子域/域配置。sub.sub.domain 也是 *.domain 的一部分,所以如果我想配置它,我必須將配置放在頂部,或者如果使用不同的文件配置使用較小的數字名稱。

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