У нас есть файл конфигурации vhost, который является универсальным в мультитенантном сценарии, однако для одного из наших клиентов требуется наличие определенного 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
Обязательно подумайте, какой метод будет более устойчивым, когда вы добавите больше исключений в будущем, что вы обязательно сделаете.
Вы должны поместить директиву alias в определение VirtualHost для example.com
<VirtualHost *:80>
ServerName example.com
...
Alias /special /srv/application/pulic/example/special
...
</VirtualHost>
большие файлы vhost очень усложняют управление, создайте отдельный файл для каждого клиента и ВКЛЮЧИТЕ его в файл vhost. это можно сделать вживую, и когда это будет сделано, Apache перезагрузит конфигурации. таким образом вы можете поддерживать несколько доменов для каждого клиента и упростить внесение изменений, как предложил Эндрю выше.