Apache-2.2
限制 apache vhost .conf 別名的範圍
我們有一個 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
當您將來添加更多例外時,請務必考慮哪種方法更可持續,您肯定會這樣做。