¿Cómo puedo asegurar que mis URL siempre comienzan con www?

17

Quiero asegurarme de que los usuarios lleguen www.mydomain.comincluso si llegan a través del alias mydomain.com. Esto es para que tenga control sobre las cookies en los subdominios, y para que Google vea un solo dominio y no una gran cantidad de URL.

¿Cómo puedo hacer esto con apache?

Magnar
fuente
55
¿Puedo sugerirle que revierta esto y haga cumplir mydomain.com en su lugar? El prefijo 'www' es redundante y completamente innecesario.
Eevee el
Las cookies se envían a todos los subdominios en mydomain.com, mientras que yo mismo puedo decidir qué cookies se cargan desde dónde con www.mydomain.com. Por ejemplo, puedo evitar agregar cookies a static.mydomain.com, de modo que las cookies no No se transmite por cada imagen que se carga. Definitivamente no es innecesario.
Magnar
Puedes decirle específicamente a Google que use un único estilo de enlace. Vea mi respuesta a continuación.
Robinicks
No tengo el representante, pero agregar estas etiquetas sería útil: redirigir redirectmatch mod_alias
Tom
1
Aunque esto es mucho más tarde, sigue siendo relevante. www no está en desuso, porque un dominio sin subdominio tiene varias desventajas. Consulte yes-www.org/why-use-www por varias razones para usar www.
user50849

Respuestas:

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

<VirtualHost ip:80>
   ServerName www.domain.com

   ... usual config
</VirtualHost>
Dave Cheney
fuente
77
Para una solución un poco más simple, puede: "Redirigir permanente / ptth: //www.domain.com/" y apache conservará automáticamente el sufijo. (Invertí http para deshabilitar el enlace automático.)
Greg Hewgill el
1
De Verdad ? Dulce, nunca supe eso. Siempre pensé que tenías que usar RedirectMatch para preservar las partes finales del URI
Dave Cheney el
4

Agregue esto a su httpd.confarchivo:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
Magnar
fuente
4

Habilite la compatibilidad con mod_rewrite y luego cree un archivo .htaccess en la carpeta raíz para su dominio con el siguiente contenido:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteBase /
   RewriteCond %{HTTP_HOST} ^domain\.com$
   RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
</IfModule>
Richard Slater
fuente
no olvide hacer que la prueba RewriteCond no distinga entre mayúsculas y minúsculas ...
Alnitak
Solo haga esto si no tiene acceso para realizar cambios en el archivo de configuración de apache por alguna razón. .htaccesslos archivos tienen mucha sobrecarga, y las reescrituras dentro de ellos lo hacen mucho peor.
John Dalton
usar Redirect siempre es preferible a usar mod_rewrite para esta tarea.
David Pashley
3

Si realmente desea que Google use un estilo de dominio específico (con o sin www ), cree una cuenta gratuita de Herramientas para webmasters de Google , verifique la propiedad de su dominio (cargue un archivo) y configure su dominio preferido utilizando el panel de control en línea.

Es así de simple, y no necesita cambiar ningún código del lado del servidor, también los enlaces entrantes con o sin www se tratarán de la misma manera aumentando el PageRank de sus páginas.

Los enlaces pueden apuntar a su sitio utilizando las versiones www y no www de la URL (por ejemplo, http://www.example.com y http://example.com ). El dominio preferido es la versión que desea utilizar para su sitio en los resultados de búsqueda .

Una vez que nos indique su nombre de dominio preferido, tomaremos en cuenta su preferencia al mostrar las URL. Puede pasar algún tiempo antes de que vea este cambio totalmente reflejado en nuestro índice.

Si no especifica un dominio preferido, podemos tratar las versiones www y no www del dominio como referencias separadas a páginas separadas.

Robinicks
fuente
1

Tuve el problema opuesto, las personas que van a www.dominio.com cuando solo quiero servir directamente desde dominio.com:

<VirtualHost *:80>
   ServerName domain.com

   ... usual config
</VirtualHost>

<VirtualHost *:80>
   ServerName www.domain.com
   ServerAlias sub.domain.com # can also catch some other subdomains
   ServerAlias *.domain.com # or all previously unmatched domains

   Redirect permanent / http://domain.com/
</VirtualHost>

Como Greg Hewgill mencionó, usar Redirect es un poco más simple que RedirectMatch y hace el mismo trabajo, vea http://httpd.apache.org/docs/2.0/mod/mod_alias.html#redirect para más detalles.

Tom
fuente