
Eu tenho os seguintes hosts virtuais:
<VirtualHost *:443>
ServerName article.example.com
AliasMatch "^/(.*)" "/var/www/html/article.php"
</VirtualHost>
<VirtualHost *:443>
ServerName company.example.com
AliasMatch "^/(.*)" "/var/www/html/company.php"
</VirtualHost>
Eu gostaria de colocar tudo em um host virtual assim:
<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.*
AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
</VirtualHost>
Isso é possível? Eu tenho que usar a reescrita do mod? Quero mapear determinados subdomínios para arquivos relacionados em meu servidor sem alterar o URL. Eu quero article.example.com/test-article
mapear para article.php
.
Responder1
AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
A AliasMatch
diretiva corresponde ao caminho da URL solicitado (como você está fazendo no primeiro exemplo), não aonome de anfitrião(como você está tentando fazer aqui), então algo assim não corresponderá.
A escolha óbvia seria mod_rewrite, como você sugere. Por exemplo:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(article|company)\.
RewriteRule ^ /var/www/html/%1.php [L]
Onde a %1
referência anterior contém a correspondência do subpadrão capturado no anteriorCondPadrão.
Se /var/www/html
for a raiz do documento, então ela pode ser omitida dosubstituiçãostring, reescrevendo para um caminho de URL relativo à raiz do documento em vez de um caminho de arquivo absoluto. ou seja. simplesmente /%1.php
.
Você poderia torná-lo mais genérico e reescrever a solicitação para qualquer subdomínio onde esse subdomínio exista como um .php
arquivo na raiz do documento. Por exemplo:
RewriteCond %{HTTP_HOST} ^([^.]+)\.example
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]