Comment puis-je faire en sorte que mes URL commencent toujours par www?

17

Je veux m'assurer que les utilisateurs viennent www.mydomain.commême s'ils arrivent via l'alias mydomain.com. C'est pour que je contrôle les cookies sur les sous-domaines, et pour que Google voit un seul domaine et non pas un méli-mélo d'URL.

Comment puis-je faire cela avec apache?

Magnar
la source
5
Puis-je vous suggérer plutôt d'inverser cela et d'appliquer mydomain.com à la place? Le préfixe «www» est redondant et totalement inutile.
Evoli
Les cookies sont envoyés à tous les sous-domaines sur mydomain.com, tandis que je peux décider moi-même quels cookies sont chargés d'où avec www.mydomain.com .. Par exemple, je peux éviter d'ajouter des cookies à static.mydomain.com, afin que les cookies ne soient pas n'est pas transmis pour chaque image chargée. Ce n'est certainement pas inutile.
Magnar
Vous pouvez spécifiquement dire à Google d'utiliser un seul style de lien. Voir ma réponse ci-dessous.
Robinicks
Je n'ai pas le représentant, mais l'ajout de ces balises serait utile: redirect redirectmatch mod_alias
Tom
1
Même si c'est beaucoup plus tard, c'est toujours pertinent. www n'est pas déconseillé, car un domaine sans sous-domaine présente plusieurs inconvénients. Voir yes-www.org/why-use-www pour plusieurs raisons d'utiliser www.
user50849

Réponses:

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
la source
7
Pour une solution un peu plus simple, vous pouvez: "Rediriger permanent / ptth: //www.domain.com/" et apache conservera automatiquement le suffixe. (J'ai inversé http pour désactiver la liaison automatique.)
Greg Hewgill
1
Vraiment ? Doux, je ne l'ai jamais su. J'ai toujours pensé que vous deviez utiliser RedirectMatch pour préserver les parties finales de l'URI
Dave Cheney
4

Ajoutez ceci à votre httpd.conffichier:

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

Activez la prise en charge de mod_rewrite, puis créez un fichier .htaccess dans le dossier racine pour votre domaine avec le contenu suivant:

<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
la source
n'oubliez pas de rendre le test RewriteCond insensible à la casse ...
Alnitak
Ne faites cela que si vous n'avez pas accès pour apporter des modifications au fichier de configuration apache pour une raison quelconque. .htaccessles fichiers ont beaucoup de surcharge, et les réécritures à l'intérieur les aggravent.
John Dalton
l'utilisation de la redirection est toujours préférable à l'utilisation de mod_rewrite pour cette tâche.
David Pashley
3

Si vous voulez vraiment que Google utilise un style de domaine spécifique (avec ou sans www ), créez un compte Google Webmaster Tools gratuit , vérifiez la propriété de votre domaine (téléchargez un fichier) et définissez votre domaine préféré à l'aide du panneau de configuration en ligne.

C'est aussi simple que cela, et vous n'avez pas besoin de changer de code côté serveur, les liens entrants avec ou sans www seront traités de la même façon, augmentant le PageRank de vos pages.

Les liens peuvent pointer vers votre site en utilisant à la fois les versions www et non www de l'URL (par exemple, http://www.example.com et http://example.com ). Le domaine préféré est la version que vous souhaitez utiliser pour votre site dans les résultats de recherche .

Une fois que vous nous aurez indiqué votre nom de domaine préféré, nous tiendrons compte de votre préférence lors de l'affichage des URL. Cela peut prendre un certain temps avant de voir ce changement se refléter pleinement dans notre indice.

Si vous ne spécifiez pas de domaine préféré, nous pouvons traiter les versions www et non www du domaine comme des références distinctes à des pages distinctes.

Robinicks
la source
1

J'ai eu le problème opposé, les gens allant sur www.domain.com quand je veux juste servir directement depuis domain.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>

Comme Greg Hewgill l'a mentionné, l'utilisation de Redirect est un peu plus simple que RedirectMatch et fait le même travail, voir http://httpd.apache.org/docs/2.0/mod/mod_alias.html#redirect pour plus de détails.

À M
la source