2009-07-21 638 views
14

Tengo un sitio web decir http://www.example.com/ en la raíz de mi sitio web, he añadido el archivo .htaccess para redirigir cualquier solicitud de http://example.com/ a http://www.example.com/¿Cómo redirigir las URL que no son www a www usando htaccess?

Recientemente he creado una nueva sección "Vídeos" por lo que la dirección URL de los vídeos es http://www.example.com/videos/ . En esta carpeta de videos, tengo otro archivo htaccess que está reescribiendo las entradas de video. Cuando intento acceder al http://example.com/videos/, no me está redirigiendo a http://www.example.com/videos/

Creo que .htacces no hereda las reglas anteriores del directorio principal. ¿Puede alguien decirme cuál puede ser la regla que puedo agregar en el archivo .htaccess de la carpeta/videos/para que cualquier solicitud de http://example.com/videos/ se redirija a http://www.example.com/videos/ URL.

Respuesta

9

Creo que puede ser que su regla existente sea demasiado estricta y no se active en su subdirectorio debido a esto. Algo como esto debería funcionar en todo el sitio:

RewriteEngine on 
RewriteBase/

RewriteCond %{HTTP_HOST} ^example\.com$ 
RewriteRule ^(.*) http://www.example.com/$1 [R=301] 
+0

¿Dónde debería colocar esta regla, dentro de .htaccess del padre raíz o dentro de la carpeta .htaccess de videos? – Prashant

+0

Debería funcionar en el directorio raíz. Tengo algo similar en mi .htaccess raíz y funciona para subdirectorios. –

43

Esta es una solución más genérica, ya que puede ser utilizado con cualquier nombre de dominio sin tener que especificar el nombre de dominio específico en cada .htaccess:

# Redirect non-www to www: 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

Lo contrario también es posible (www a la no-www):

# Redirect www to non-www 
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
+2

+1 para www a código genérico no www. – Debiprasad

+2

Estoy en Magento y este código redirige //mywebsite.com/some/url a //www.mywebsite.com/index.php. ¿Hay un paso adicional aquí para mantener la URL persistente? –

+1

Creo que debe eliminar un "/" de la regla cerca de $ 1: RewriteRule^(. *) $ Http: //www.% {HTTP_HOST} $ 1 [R = 301, L] – webmaster

1

Ésta es mejores soluciones para redirigir sin www a usar .htaccess de URL www. usando este código en el archivo htaccess y revisando url.

Options +FollowSymlinks 
RewriteEngine on 
rewritecond %{http_host} ^mydomain.com [nc] 
rewriterule ^(.*)$ http://www.mydomain.com/$1 [r=301,nc] 
0

Recomiendo a todos a seguir con el siguiente método sólo se redirigir el dominio principal solamente cuando otro subdirectorio o subdominio en su anfitrión.

# Redirect non-www to www only for main domain 
# recommended if you have any/some sub-domain(s) 
RewriteEngine on 
RewriteBase/

# Replace yoursite and .tld respectively 
RewriteCond %{HTTP_HOST} ^yoursite\.tld$ 
# Replace yoursite.com 
RewriteRule ^(.*) http://www.yoursite.com/$1 [R=301] 

Utilice este método si está realmente seguro y espero que usted que usted no tendrá que utilizar sub-dominio con su sitio web, es decir subdomain.yoursite.com o lo que sea. Entonces puedes utilizar el siguiente método. "Decir Una vez más asegurarse de si realmente desea utilizar este método"

# Redirect all non-www to www including subdomain(s) 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

El método a continuación volverá a dirigir toda url www a www no incluidos sus subdominios aunque no se puede utilizar www.subdirecty.yoursite.com le indicará un error con 500.

# Redirect www to non-www 
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 
Cuestiones relacionadas