Limitar o escopo de um alias do apache vhost .conf

1

Nós temos um arquivo conf vhost que é um pega-tudo em um cenário multi-tenant, no entanto, há um requisito para que um de nossos clientes tenha uma declaração alias específica que é atualmente definida assim ...

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

Atualmente, isso significa que CADA cliente / domínio único no sistema seria capturado e forçado a veicular /special/ , o que obviamente é um problema.

Como posso limitar o escopo dessa declaração Alias para que ela seja aplicada somente quando o domínio solicitado corresponde a example.com ou www.example.com ?

FYI, estamos mudando do Apache 2.2 para o 2.4 em breve, se houver alguma diferença no caso específico, indique-os. Obrigado!

EDIT Devo salientar que estamos limitados neste caso pelo middleware e devemos manter tudo em uma única declaração de vhost.

    
por oucil 08.03.2015 / 17:33

3 respostas

2

A maneira mais direta é criar uma declaração de host virtual separada e não padrão apenas para esse domínio:

<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>

A única desvantagem é que você precisará manter o mesmo # other default directives nos hosts virtuais example.com e padrão. Uma boa maneira de fazer isso é colocá-los todos em um arquivo e Include desse arquivo em ambas as declarações de host virtual.

Como alternativa, você pode manter apenas uma declaração de host virtual e adicionar um RewriteRule:

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

Não deixe de considerar qual método será mais sustentável quando você adicionar mais exceções no futuro, como você certamente fará.

    
por 08.03.2015 / 19:32
1

Você deve colocar a diretiva alias na definição do VirtualHost para example.com

<VirtualHost *:80>
    ServerName example.com
    ...
    Alias /special /srv/application/pulic/example/special
    ...
</VirtualHost>
    
por 08.03.2015 / 19:31
-1

grandes arquivos vhost tornam o gerenciamento muito difícil, crie um arquivo individual para cada locatário e INCLUE-o no arquivo vhost. isso pode ser feito ao vivo e ter o apache recarregando as configurações quando estiver pronto. Dessa forma, você pode oferecer suporte a vários domínios por locatário e facilita a realização de alterações como as sugeridas por Andrew acima.

    
por 08.03.2015 / 20:49