Apache AliasMatch com vários subdomínios

Apache AliasMatch com vários subdomínios

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-articlemapear para article.php.

Responder1

AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"

A AliasMatchdiretiva 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 %1referência anterior contém a correspondência do subpadrão capturado no anteriorCondPadrão.

Se /var/www/htmlfor 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 .phparquivo na raiz do documento. Por exemplo:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]

informação relacionada