2009-04-22 18 views
5

(Sé que esto no es una cuestión de programación en sí, pero se trata de expresiones regulares, por lo que al menos es el límite ...)Apache y mod_rewrite: Redireccionar dominio al subdirectorio

La configuración:

Apache 2.0 con mod_rewrite en Windows. Dos dominios, llamémoslos dominio1.ejemplo y dominio2.ejemplo. Me gustaría alojar ambos dominios en el mismo servidor ("servidor1"), así que los dirijo a la misma dirección IP.

Ahora, si el usuario escribe "domain2.example" en su navegador, quiero que termine en un subdirectorio ** en el servidor, pero deje el dominio que escribió intacto ("domain2.example/domain2 /") La redirección debe dejar intactos todos los enlaces absolutos y relativos en las páginas de este dominio/directorio, por supuesto.

¿Esto es posible con mod_rewrite (o hosts virtuales Apache u otro método), y cómo lo hago?

** El "subdirectorio" en este caso no es realmente una carpeta de archivos en el disco, sino una carpeta virtual creada con la directiva Apache "Location".

Gracias.

Respuesta

2

No creo que necesite usar mod_rewrite, debería poder usar vhosts para esto como usted sugiere. Para hacer esto, tendrá un solo vhost con el nombre de servidor domain2.example que apunta al directorio que desea. Esto también usará la directiva ServerAlias ​​para domain1.example para que las solicitudes para esto vayan al mismo directorio.

Consulte la documentación para ServerAlias y DocumentRoot. También tenga en cuenta que si desea que el directorio aparezca en la URL, será que necesite usar mod_rewrite.

3

Suponiendo que los dominios son independientes, la solución recomendada son los hosts virtuales.

Puede encontrar la documentación en el apache website.

+0

¿La directiva DocumentRoot (en el host virtual sección de configuración) ¿funciona para reenviar a un "subdirectorio" que realmente es una "Ubicación" y no una carpeta de archivos físicos en el servidor? – ObiWanKenobi

+0

¿Qué quiere decir con la ubicación y no la carpeta de archivos? Supongo que tiene un index.html/index.php/index.cgi en alguna parte y que coloca el DocumentRoot en la carpeta donde está ubicado ese archivo. –

+0

Con "Ubicación" me refiero a esto: http: //httpd.apache. org/docs/2.0/mod/core.html # ubicación Combinado específicamente con la directiva SetHandler: http://httpd.apache.org/docs/2.0/mod/core.html#sethandler De modo que no hay un examen físico archivo (index.htm, index.php, lo que sea), sino más bien un reenvío a un "Manejador" (pls_handler, es decir, mod_plsql, en mi caso específico). – ObiWanKenobi

6

Supongo que no tiene acceso a la configuración de Apache, de lo contrario, sí, los hosts virtuales son su mejor opción. Si no lo hace, sin embargo, esto se puede poner en un archivo .htaccess y debe hacer el truco:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.+)\.yourwebsite\.com$ 
RewriteRule ^/(.*)$ /path/to/your/subdomains/%1/$1 [L] 

Así que una solicitud para http://foo.yourwebsite.com/bar irían a /path/to/your/subdomains/foo/bar

Cuestiones relacionadas