Dominio de redirect de Apache y todos los subdominios

Tengo una configuration de configuration de Apache con varios hosts virtuales como subdominios. Acabo de comprar un nuevo nombre de dominio, y quiero que todas las requestes a este nombre de dominio para networkingirigir a la nueva, incluidos los subdominios:

old.com > new.com sub.old.com > sub.new.com 

¿Hay alguna manera fácil de hacer esto dentro del httpd.conf ?

Ha sido un time desde que he escrito un RewriteRule, pero aquí está mi crack en él:

 RewriteEngine on RewriteCond %{HTTP_HOST} (.+\.)?old\.com$ [NC] RewriteRule (.*) http://%1new.com$1 [R] 

Coloque esto en un host virtual basado en nombre para old.com. Aquí está el process de pensamiento, de modo que usted puede tener una oportunidad de corregir por su count si estoy un poco oxidado:

RewriteCond desglose:

  • RewriteCond coincidir todos los hosts entrantes con un prefijo de "uno o más caracteres seguidos de un punto literal", seguido de old.com. El punto está dentro del paréntesis porque no estará presente a less que se haya suministrado un componente de subdominio.
  • Las barras invertidas son para escaping del significado de los puntos. (hacerlas literales)
  • El ? especifica que todo lo contenido en el paréntesis es opcional. (el componente de subdominio)
  • El carácter $ ancla el regex al final de la cadena, para evitar la prematura coincidencia de rareza.
  • El indicador [NC] obliga a que esto sea insensible a mayúsculas y minúsculas.
  • Desde el virtualhost se asegurará de que cada cadena contiene un patrón de coincidencia, este partido por sí mismo no hace nada. Lo importante es que el paréntesis capturará el componente de subdominio del encabezado de host entrante para la próxima RewriteRule .

RewriteRule desglose:

  • Capture el URI completo de la request entrante con (.*) .
  • Avanzando, el indicador [R] especifica una acción de networkingirección.
  • La URL de networkingirección tiene dos sustituciones:
    • El primero es %1 , que es la primera cadena capturada por RewriteCond . En este caso, debe ser el sufijo de dominio. La falta de un punto de prefijo antes de new.com es importante: puede que no haya habido un componente de subdominio, en cuyo caso no debería haber ningún punto. El punto debería haber sido capturado como parte de la regex RewriteCond.
    • El segundo es $1 , que coincide con la primera cadena capturada por RewriteRule . Éste debería ser el URI al que el usuario intentaba acceder bajo el subdominio.

Si alguien señala una solución a esto que evita el uso de RewriteRule, bravo a ellos: usted debe preferir que como su solución cuando sea posible. mod_rewrite es para cuando te falta una solución más elegante proporcionada por las directivas de configuration dedicadas.

También debería tener en count que este ejemplo sólo hará networkingirección no HTTPS, y no tiene en count si el server web está utilizando un puerto alternativo. Usted puede necesitar ajustar esto más lejos para las necesidades especiales tales como ése, pero es un punto de partida.