Apache-2.2

限制 apache vhost .conf 別名的範圍

  • March 8, 2015

我們有一個 vhost conf 文件,它在多租戶場景中是一個包羅萬象的文件,但是我們的一個客戶需要有一個alias目前定義的特定聲明……

Alias /special "/srv/application/public/example/special"

目前這意味著系統中的每個客戶端/域都將被擷取並被迫服務/special/,這顯然是一個問題。

如何限制此Alias聲明的範圍,使其僅在請求的域匹配example.com或時應用www.example.com

僅供參考,我們很快就會從 Apache 2.2 遷移到 2.4,如果在特定情況下有任何差異,請指出。謝謝!


編輯我應該指出,在這種情況下,我們受到中間件的限制,並且必須將所有內容保存在單個 vhost 聲明中。

最直接的方法是為該域創建一個單獨的、非預設的虛擬主機聲明:

<VirtualHost *:80>
 ServerName example.com
 ServerAlias www.example.com
 Alias /special "/srv/application/public/example/special"
 # other default directives
</VirtualHost>
<VirtualHost *:80>
 # other default directives
</VirtualHost>

唯一的缺點是您需要# other default directives在 example.com 和預設虛擬主機中保持相同。一個好的方法是將它們全部放入一個文件中,並將Include該文件放在兩個虛擬主機聲明中。

或者,您可以只保留一個虛擬主機聲明並添加一個 RewriteRule:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^/special(/.*|$) /srv/application/public/example/special$1

當您將來添加更多例外時,請務必考慮哪種方法更可持續,您肯定會這樣做。

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