Tengo un sitio web que no parece redirigir de no www a www.
Mi configuración de Apache es la siguiente:
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
¿Qué me estoy perdiendo?
apache
redirect
mod-rewrite
no-www
usuario121196
fuente
fuente
.htaccess
solución basada, sugiero una respuesta que se ha planteado en la pregunta diametral: stackoverflow.com/a/5262044/367456Respuestas:
Usar el motor de reescritura es una forma bastante pesada de resolver este problema. Aquí hay una solución más simple:
Y luego tendrá otra
<VirtualHost>
sección conServerName www.example.com
su configuración de servidor real. Apache conserva automáticamente cualquier cosa después del/
uso de laRedirect
directiva , que es un error común sobre por qué este método no funcionará (cuando en realidad lo hace).fuente
www.example
yexample
donde sea que aparezcan en la muestra.Redirect 301 / http://example2.com/extra/
pero cuando se redirige, se pierde la barra diagonal, lo que significa queexample.com/blah
va aexample2.com/extrablah
. ¿Algunas ideas? (Apache 2.2.22)http://example.com/subdir/?lold=13666
=>http://www.example.com/subdir/?lold=13666
fuente
example.com/subdi1/ws/*
pasar sin www?s
a http en la tercera fila.fuente
www.
en elServerAlias
?Para eliminar
www
de suURL
sitio web, use este código en su.htaccess
archivo:Para forzar
www
en su sitio web,URL
use este código en.htaccess
Donde
YourSite.com
debe ser reemplazado con suURL
.fuente
Esto es lo que sucede con el código anterior. El primer bloque de host virtual comprueba si la solicitud es www.example.com y ejecuta su sitio web en ese directorio.
En su defecto, se trata de la segunda sección de host virtual. Aquí, todo lo que no sea www.example.com se redirige a www.example.com.
El orden aquí importa. Si agrega la segunda directiva virtualhost primero, provocará un bucle de redireccionamiento.
Esta solución redirigirá cualquier solicitud a su dominio, a www.yourdomain.com.
¡Salud!
fuente
Esto es similar a muchas de las otras sugerencias con un par de mejoras:
%{REQUEST_URI}
reglas anteriores .La porción de ruta no afectada por
RewriteRule
s anteriores%{REQUEST_URI}
es.fuente
Esto comienza con la
HTTP_HOST
variable, que contiene solo la parte del nombre de dominio de la URL entrante (example.com
). Suponiendo que el nombre de dominio no contienewww.
ay coincide exactamente con su nombre de dominio, entonces entra en juego RewriteRule. El patrón^(.*)$
coincidirá con todo en elREQUEST_URI
, que es el recurso solicitado en la solicitud HTTP (foo/blah/index.html
). Almacena esto en una referencia inversa, que luego se utiliza para reescribir la URL con el nuevo nombre de dominio (uno que comienza conwww
).[NC]
indica una coincidencia de patrones que no distingue entre mayúsculas y minúsculas,[R=301]
indica una redirección externa usando el código 301 (recurso movido permanentemente), y[L]
detiene toda reescritura adicional y redirige inmediatamente.fuente
Código de redireccionamiento para ambos no www => www y opuesto www => no www. No hay dominios y esquemas de codificación en el archivo .htaccess. Por lo tanto, el dominio de origen y la versión http / https se conservarán.
APACHE 2.4 Y MÁS NUEVOS
NO WWW => WWW:
WWW => NO WWW:
Nota: no funciona en Apache 2.2 donde% {REQUEST_SCHEME} no está disponible. Para compatibilidad con Apache 2.2, use el código a continuación o reemplace% {REQUEST_SCHEME} con http / https fijo.
APACHE 2.2 Y MÁS NUEVOS
NO WWW => WWW:
... o una versión más corta ...
WWW => NO WWW:
... la versión más corta no es posible porque% N está disponible solo desde el último RewriteCond ...
fuente
Corrí esto ...
Necesito que esto sea universal para más de 25 dominios en nuestro nuevo servidor, por lo que esta directiva está en mi archivo virtual.conf en una etiqueta <Directory>. (dir es padre para todos los docroots)
Sin embargo, tuve que hacer un poco de pirateo en la regla de reescritura, ya que el docroot completo se estaba llevando a cabo en la coincidencia de patrones, a pesar de lo que http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html dice sobre que solo son cosas después del host y el puerto.
fuente
Si está utilizando Apache 2.4, sin la necesidad de habilitar el módulo de reescritura de apache, puede usar algo como esto:
fuente
Redirigir domain.tld a www.
Las siguientes líneas se pueden agregar en las directivas de Apache o en el archivo .htaccess:
No olvide aplicar los cambios de apache si modifica el vhost.
(basado en el Drupal7 predeterminado .htaccess pero debería funcionar en muchos casos)
fuente
¡Esto es simple!
fuente
Esto redirigirá no solo el nombre de dominio sino también las páginas internas, como ...
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
fuente
Prueba esto:
fuente
No lo use siempre
Redirect permanent
(o por qué puede causar problemas en el futuro)Si existe la posibilidad de que agregue subdominios más tarde, no lo use
redirect permanent
.Porque si un cliente ha usado un subdominio que no se registró
VirtualHost
, también puede que nunca llegue a este subdominio, incluso cuando se registre más tarde.redirect permanent
envía un mensajeHTTP 301 Moved Permanently
al cliente (navegador) y muchos de ellos almacenan en caché esta respuesta para siempre (hasta que el caché se borra [manualmente]). Por lo tanto, el uso de ese subdominio siempre se redirigirá automáticamente a www. *** sin volver a solicitar el servidor.ver ¿Por cuánto tiempo los navegadores almacenan en caché los HTTP 301?
Así que solo usa
Redirect
Apache.org - Cuándo no usar mod_rewrite
Apache.org - Nombres de host canónicos
fuente
RewriteEngine On RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
mira este trabajo perfecto
fuente
-Si aloja varios nombres de dominio (Opcional)
-Si todos esos nombres de dominio están usando https (como deberían)
-si desea que todos esos nombres de dominio usen www dot domainName
Esto evitará la doble redirección (http: // non www a http: // www y luego a https: // www)
Y
Debe cambiar el código de redireccionamiento 301 al más conveniente
fuente
Solo tengo el mismo problema. Pero resuelto con esto
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Esta regla redirige no www a www.
Y esta regla para redirigir www a no www
RewriteEngine On RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC] RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
Consulte en http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/
fuente
Esto funciona para mi:
Utilizo el patrón de anticipación
(?!www.domain.com)
para excluir elwww
subdominio al redirigir todos los dominios alwww
subdominio para evitar un bucle de redireccionamiento infinito en Apache.fuente
El código que uso es:
fuente
Si usa la solución anterior de dos
<VirtualHost *:80>
bloques con diferentesServerName
s ...... entonces debes configurar
NameVirtualHost On
también .Si no hace esto, Apache no se permite usar los diferentes
ServerName
s para distinguir los bloques, por lo que recibe este mensaje de error:... y no ocurre la redirección, o tiene un bucle de redirección infinito, dependiendo del bloque que coloque primero.
fuente
Tuve una tarea similar en un WP Multisite, donde la regla de redireccionamiento tenía que ser genérica (para cualquier dominio que agregaría a la red). Primero resolví agregar un comodín al dominio (dominio estacionado). Nota la . después de .com.
Y luego agregué las siguientes líneas al archivo .htaccess en la raíz de mi multisitio. Supongo que funcionaría para cualquier sitio.
Esperemos que esto ayude.
PD. Si desea redirigir de no www a www, cambie la última línea a
fuente
Me resultó más fácil (y más útil) usar ServerAlias cuando se usan múltiples vhosts.
Esto también funciona con https vhosts.
fuente