
Estoy seguro de que no soy la primera persona que se encuentra con este problema, pero por mi vida no puedo encontrar una respuesta, aunque eso podría deberse a no saber qué buscar.
Tengo la necesidad de alojar muchos sitios web de clientes en un servidor Ubuntu. Todo funciona bien, pero quiero configurar hosts virtuales dinámicos para poder automatizar el proceso de creación de un sitio de WordPress en el servidor. Tengo mod_vhost_alias
el módulo funcionando y estoy satisfecho con eso, sin embargo, tuve un problema con .com
dominios versus .co.uk
dominios .com.au
y elVirtualDocumentRoot
Para un dominio como example.com
quiero que todas las solicitudes www.exapmple.com
apunten example.com
a un directorio llamado algo así como /var/webroot/example.com
y para dominios como example.co.uk
, me gustaría que todas las solicitudes www.example.co.uk
apunten example.co.uk
a un directorio llamado/var/webroot/example.co.uk
El VDR que tengo en este momento se ve así...
VirtualDocumentRoot /var/webroot/%-2.0.%-1.0
Que ocupa la penúltima y última parte. Esto funciona muy bien, example.com
pero example.co.uk
busca un directorio en /var/webroot/co.uk
, ¡lo cual no es ideal!
¿Hay alguna forma de evitar esto? ¿Necesito usarlo mod_rewrite
y, de ser así, cómo?
Respuesta1
Este es un caso en el que simplemente dividiría los enlaces simbólicos en lugar de usar uno muy específico (y potencialmente frágil) RewriteRule
:
Utilice VirtualDocumentRoot /var/webroot/%0
y luego /var/webroot/
cree un enlace simbólico para www.example.com
apuntar al directorio real de example.com
. Esto funcionará con dominios sin importar la profundidad que necesites, además de ser un poco más flexible si tienes un sitio donde www
debería tener contenido diferente por algún motivo, o quieres apuntar aaa.example.com
al mismo contenido que example.com
.
Si eso no es de tu agrado, entonces puedes usar mod_rewrite
:
DocumentRoot /var/webroot
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteRule ^/(.*)$ /%2/$1
Eso siempre buscará el nombre de dominio en /var/webroot
, arrancando el www
frente si está allí antes de mirar.
Como alternativa, también puedes redirigir para eliminar (o agregar) www
a todas las solicitudes en lugar de ofrecer el mismo contenido para ambos dominios.