Apache mod_rewrite CUALQUIER subdominio (s) al dominio raíz, a menos que exista como virtualdocumentroot

Digamos que tiene una configuración de host virtual Apache2, algo como esto:

/htdocs/parent1.com
/htdocs/sub1.parent1.com
/htdocs/sub2.parent1.com
/htdocs/parent2.net
/htdocs/parentn.org

Di que te gustaría hacer esto con VirtualDocumentRoot /htdocs/%0, para que pueda agregar y eliminar hosts virtuales sin modificar su configuración de Apache. Eso es importante: por favor, no se meta con los archivos htaccess o httpd.conf cada vez que un host virtual entra o sale, ya sea que ese host sea un dominio principal o no. De hecho, digamos que estás usando AllowOverride None.

De todos modos, la pregunta es, ¿cómo podría redirigir 301 subdominios inexistentes a sus dominios principales correspondientes sin redirigir subdominios existentes?

preguntado el 04 de julio de 12 a las 08:07

1 Respuestas

Puede que haya resuelto mi propio problema. Sin embargo, agradecería cualquier comentario si alguien encuentra un problema con lo que estoy haciendo.

Lo siguiente deja en paz cualquier solicitud a un subdominio arbitrario, siempre que exista una raíz de documento correspondiente; pero redirige cualquier solicitud a un subdominio que no existe en el sistema de archivos.

<IfModule rewrite_module>
    RewriteEngine On
    RewriteMap lowercase int:tolower
    RewriteCond "/htdocs/${lowercase:%{HTTP_HOST}}" !-d
    RewriteCond %{HTTP_HOST} "\.([^\.]+\.[^\.]+)$"
    RewriteRule ^/(.*)$ "http://%1/$1" [R=301]
</IfModule>

Me permite configurar DNS comodín y usar alojamiento virtual basado en nombre, sin tocar ninguna configuración. Además, no hay htaccess involucrado. Simplemente cree su carpeta con cualquier nombre como "/htdocs/[host.]domain.tld" y estará en funcionamiento. Por lo que puedo decir, esto realmente no funciona con SSL/TLS (presumiblemente algo relacionado con %{HTTP_HOST}?), pero los sitios seguros son comparativamente pocos y se resuelven mejor por dirección IP que por nombre de host.

Respondido 04 Jul 12, 16:07

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