Apache conf: como especificar subdomínio em Directory / path / to / subdomain ao usar mod_vhost_alias para hosts virtuais com curinga

1

Para começar, solicitamos que uma solicitação para *.example.com fosse manipulada por um diretório /var/www/*/ correspondente e obtivemos esse trabalho usando mod_vhost_alias com VirtualDocumentRoot , da seguinte maneira:

<VirtualHost *:80>
    ServerAlias *.example.com
    UseCanonicalName Off
    VirtualDocumentRoot /var/www/%1/
</VirtualHost>

Agora, queremos expandir essa configuração compartilhada aplicando as mesmas RewriteRules a todos os subdomínios / diretórios - de dentro do bloco <Directory> da configuração do vhost -, mas não sabemos como fazer referência ao subdomínio / diretório.

Estamos basicamente tentando fazer algo assim (observe o uso de% 1, que não funciona nesse caso):

<VirtualHost *:80>
    ServerAlias *.example.com
    UseCanonicalName Off
    VirtualDocumentRoot /var/www/%1/

    <Directory /var/www/%1>
            RewriteEngine on
            RewriteRule     ^about/?$       index.php?view=about
            RewriteRule     ^settings/?$    index.php?view=settings
            RewriteRule     ^support/?$     index.php?view=support
    </Directory>
</VirtualHost>

É algo assim possível?

Obrigado.

    
por Kosta Kontos 19.09.2011 / 23:01

2 respostas

1

Ok, conseguimos fazer isso funcionar. Tudo o que era necessário era um pequeno ajuste do caminho <Directory> (usando o caractere curinga * em vez de% 1), removendo os caracteres ^ dos padrões de RewriteRules e adicionando as strings de entrada / de substituição:

<VirtualHost *:80>
    ServerAlias *.example.com
    UseCanonicalName Off
    VirtualDocumentRoot /var/www/%1/

    <Directory /var/www/*>
        RewriteEngine on
        RewriteRule     about/?$       /index.php?view=about
        RewriteRule     settings/?$    /index.php?view=settings
        RewriteRule     support/?$     /index.php?view=support
    </Directory>
</VirtualHost>

Agora, para cumprir a política do ServerFault (assim como a indexação do Google), estou marcando essa pergunta como respondida, mas devo enfatizar que não poderíamos ter feito isso sem a ajuda do paciente de thumbs em #httpd em irc.freenode.net

    
por 20.09.2011 / 12:32
0

Não se preocupe com <Directory> neste caso.

<VirtualHost *:80>
    ServerAlias *.example.com
    UseCanonicalName Off
    VirtualDocumentRoot /var/www/%1/

    RewriteEngine on
    RewriteRule     ^/about/?$       /index.php?view=about
    RewriteRule     ^/settings/?$    /index.php?view=settings
    RewriteRule     ^/support/?$     /index.php?view=support
</VirtualHost>

Se você tiver algo diferente de Rewrite que precisa ser feito, por exemplo, controles de acesso, adicione um bloco <Location> em vez de um bloco <Directory> :

<Location />
    Order deny,allow
    Deny from all
    Allow from 10.0.0.0/8
</Location>
    
por 19.09.2011 / 23:16