Alojamiento virtual configurado dinámicamente

¡Hola! Me gustaría preparar un host virtual dinámico para todos los subdominios que se crearán en el futuro usando mod_rewrite. Todos los subdominios se configurarían de la misma manera, así que pensé en usar la configuración dinámica de VH. Quiero que la raíz de mi documento para cada subdominio sea / home / user / public_html / subdomainName.

Lo intenté con la siguiente configuración, pero no tuve éxito:

<VirtualHost xxx.xxx.xxx.xxx:80>
    # get the server name from the Host: header
    UseCanonicalName Off

    <Directory /home/user/public_html/>
    # ExecCGI is needed here because we can't force
    # CGI execution in the way that ScriptAlias does
      Options FollowSymLinks ExecCGI
    </Directory>

    RewriteEngine On

    # a ServerName derived from a Host: header may be any case at all
    RewriteMap lowercase int:tolower

    #rule that is suposed to set document root of virtual host!??? 
    RewriteRule ^([a-z-]+)\.domain\.com/?(.*) /home/user/public_html/$1/$2

</VirtualHost>

La regla o algo parece estar mal y no se aplica. Nunca antes había trabajado con VH dinámico, así que no tengo idea de dónde me equivoco ...

preguntado el 08 de enero de 11 a las 18:01

Esta pregunta es más apropiada para serverfault.com -

3 Respuestas

Esta es una necesidad que mucha gente tenía antes que usted. Entonces hay un módulo de apache que puede hacer eso por ti mod_vhost_alias http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html

Proporciona alojamiento virtual masivo configurado dinámicamente

Respondido el 09 de enero de 11 a las 03:01

en lugar de hosts virtuales dinámicos, también puede hacer esto usando dns comodín, lo que significa configurar {cualquier cosa} .yourdomain.tld para que apunte a su servidor.

Esto también le dará la misma raíz de documento para cada dominio.

tenga en cuenta que deberá agregar ServerAlias *.yourdomain.tld a la entrada del host virtual

Respondido el 08 de enero de 11 a las 21:01

Tnx, pero si es posible, me gustaría tener un documentRoot separado para cada subdominio. De lo contrario, mi aplicación en subdominios no funciona correctamente (rutas incorrectas). - SimonM

Con RewriteRule no puede acceder al nombre de dominio. También use RewriteCond para esa parte y use% 1, etc. para referencia inversa.

RewriteCond %{HTTP_HOST} ^([a-z-]+)\.domain\.com$ [NC]
RewriteRule (.*) %1/$1

El único problema es que esto creará un ciclo continuo de anteponer la cadena del nombre del subdominio. Entonces, lo que normalmente hago es crear una carpeta separada para subdominios, como 'subdominios'

RewriteRule ^subdomains - [L]
RewriteCond %{HTTP_HOST} ^([a-z-]+)\.domain\.com$ [NC]
RewriteRule (.*) subdomains/%1/$1

Respondido el 08 de enero de 11 a las 21:01

¡Tnx! Intenté esto antes, pero me quedé atrapado en el bucle que ahora resolví con la idea de la carpeta de subdominios. Ahora me pregunto si también es posible cambiar DocumentRoot para cada subdominio para que apunte directamente a la carpeta / subdominios / nombre de subdominio. ¿Es esto posible con una solución de reescritura de VH o tendría que hacer VirtualHost por separado para cada subdominio? - SimonM

El documentRoot se fija por VH. Entonces, o su trabajo en torno a la 'incorrección' del valor DocumentRoot, o tiene que crear un VH para cada subdominio. ¿Para qué necesitas DocumentRoot? - Gerben

Se supone que cada subdominio contiene una instancia de mi aplicación CRM. Pero cuando lo estaba programando pensé que estaría en la raíz, así que usé $ _SERVER ["DOCUMENT_ROOT"] de php, ... Ahora esas rutas son incorect, porque app. se coloca en dos niveles debajo de documentRoot. ¿Hay alguna forma de evitar esto? - SimonM

Puede agregar un archivo php de antemano automático que modifique la variable $ _SERVER ["DOCUMENT_ROOT"] basándose en $ _SERVER ['HTTP_HOST']. No estoy seguro de si puede cambiar directamente $ _SERVER ["DOCUMENT_ROOT"] de apache / htaccess - Gerben

Probablemente solo voy a corregir las rutas a relativo, por lo que documentRoot no importará ... ¡Tnx de todos modos! - SimonM

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.