2010-12-09 19 views
9

No estoy muy familiarizado con los archivos .htaccess, y estoy tratando de excluir a un subdominio (algo así como dev.example.com) de la siguiente regla de reescritura que ya está en su lugar:¿Excluyendo un subdominio de .htaccess mod_rewrite rules?

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 

Esta regla prohíbe que una persona que acaba de entrar example.com o http://example.com y obliga a la presentación deseada de la URL, http://www.example.com.

he intentado algunas opciones de exclusión de un subdominio de esta regla de reescritura, pero fue en vano. Cada uno de los directorios en el sitio tienen su propio. htaccess, pero parece que este sigue teniendo prioridad. ¿Alguna idea? ¡Gracias!

Respuesta

12

La regla existente ya excluye un subdominio. Sólo tiene que añadir una nueva condición:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] 
RewriteCond %{HTTP_HOST} !^dev\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 

También puede deshacerse de las expresiones regulares:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !=www.example.com [NC] 
RewriteCond %{HTTP_HOST} !=dev.example.com [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 

La sintaxis se puede encontrar en http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewritecond

+0

Parece que esta sintaxis funcionaría, pero causa errores de recursión. ¿Algunas ideas? – MindSculpt

+0

Sin embargo, su primer ejemplo sí parece funcionar, usando expresiones regulares ... – MindSculpt

+0

Ambos fragmentos deben ser equivalentes y me valen. Le sugiero que limpie la memoria caché de su navegador y vuelva a intentarlo. –

2

No estoy seguro si esto podría caber para usted, pero es una buena práctica usar la configuración de apache virtualhosts en lugar de los archivos .htaccess. En ese caso, para los no-www -> www redirección, que suelen utilizar algo como:

<VirtualHost *:80> 
    ServerName example.com 
    RedirectMatch permanent ^(.*) http://www.example.com$1 
</VirtualHost> 

que generalmente es más seguro que una regla mod_rewrite.

+0

Dado que en realidad no está combinando nada, 'Redirect' o' RedirectPermanent' debería ser suficiente. –

+0

Escribí esa pieza de configuración hace mucho tiempo y luego la reutilicé en varios lugares tal como está, así que no recuerdo exactamente por qué usé 'RedirectMatch' en lugar de' Redirigir', pero supongo que esa era la única manera para preservar la ruta de solicitud completa, en lugar de simplemente redirigir a la nueva URL fija. IE: 'http: // example.com/path/to/page.html' redirigiría a' http: // www.example.com/path/to/page.html'. – redShadow

+0

Todas las directivas 'Redirect *' funcionan de esa manera ;-) –

2
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^(dev|www)\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] 
Cuestiones relacionadas