Tengo los siguientes hosts virtuales:
<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>
Me gustaría poner todo bajo un host virtual así:
<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.*
AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
</VirtualHost>
es posible? ¿Tengo que usar mod reescritura? Quiero asignar ciertos subdominios a archivos relacionados en mi servidor sin cambiar la URL. Quiero article.example.com/test-article
mapear a article.php
.
Respuesta1
AliasMatch "^(article|company)\.example\.*/(.*)" "/var/www/html/$1.php"
La AliasMatch
directiva coincide con la ruta URL solicitada (como lo está haciendo en el primer ejemplo), no con lanombre de host(como estás intentando hacer aquí), por lo que algo como esto no coincidirá.
La opción obvia sería mod_rewrite, como sugieres. Por ejemplo:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(article|company)\.
RewriteRule ^ /var/www/html/%1.php [L]
Donde la %1
referencia inversa contiene la coincidencia del subpatrón capturado en el anteriorPatrónCond.
Si /var/www/html
es la raíz del documento, entonces se puede omitir delsustitucióncadena, reescribiendo en una ruta URL relativa a la raíz del documento en lugar de una ruta de archivo absoluta. es decir. simplemente /%1.php
.
Podría hacerlo más genérico y reescribir la solicitud para cualquier subdominio donde ese subdominio exista como un .php
archivo en la raíz del documento. Por ejemplo:
RewriteCond %{HTTP_HOST} ^([^.]+)\.example
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]