Version complète: sur le forum Webmaster Hub : monsite.com vers www.monsite.com
Webmaster Hub > Création et exploitation de Sites Internet > Les fondations d'un site
Julien_B
Hello à toutes et à tous !

Connaissez-vous la meilleure solution pour rediriger tous les répertoires et pages de http://monsite.com
Vers http://www.monsite.com

ex : http://monsite.com/doc/document.htm
vers : http://www.monsite.com/doc/document.htm

Merci de vos réponse ! B)

@++++++++
MS-DOS_1991
Salut Julien_B smile.gif

Si ton site n'a pas énormément de pages et si ton hébergeur le supporte, la meilleure solution est sans doute un .htaccess.
CODE
RewriteEngine on
RewriteCond %{HTTP_HOST} ^monsite.com$
RewriteRule ^(.*)   http://www.monsite.com/$1  [QSA,L,R=301]

Sinon, il faut faire la même chose mais en php

@+ wink.gif
Julien_B
ok, mais j'ai entendu parlé de :

Apache/Mod_Rewrite

ou

Lighttpd/mod_redirect

Que pouvez-vous me dire à ce sujet ?

thx
Mamat
Pour ma part, est-ce du au registar ou à l'hébergeur je ne sais, mais ave ou sans www ca fonctionne pareil... Ais-je bien compris la question ?
Dan
Pour rediriger les pages sans le www vers les mêmes pages avec le www, il suffit de mettre un fichier .htaccess à la racine du site et d'utiliser la règle donnée par MS-DOS 1991, ou la règle inverse:
CODE
RewriteEngine on
RewriteCond %{HTTP_HOST} !www.monsite.com
RewriteRule ^(.*)   http://www.monsite.com/$1  [R=301,QSA,L]


Cette règle demande la redirection si le domaine n'est pas www.monsite.com, elle est plus générale. wink.gif

Dan
Portekoi
Bonjour,

@Mamat : Le fait de ne pas avoir les 'www' influs sur les cookies et donc les connexions à certains sites/forums smile.gif

Bon courage

Portekoi
Mamat
Ha oui je n'y avais pas pensé ! Autant pour moi.
Julien_B
Excusez-moi si je suis un peu relou, mais vos codes sont pas exactement pareil...

! www.monsite.com

^monsite.com$


(j'ai bien compris l'histoire des www avec ou sans)

Sinon, je n'ai pas de fichier .htaccess, donc j'imagine que je dois juste créer un fichier texte... et le contenu ? il doit commencer ou finir avec une balise spéciale ?
je dois le mettre dans /www ou bien dans ../www ?

thx !
Dan
Julien,

Un fichier .htaccess est un simple fichier texte qui doit, dans ce cas-ci, se trouver à la racine du site (répertoire /www)
Si tu le crées en local, envoies-le en mode "texte" et non pas en mode "binaire" !

Le fait que les 2 règles données ne soient pas les mêmes est expliqué dans le post.
La règle que je donne dit "si le domaine n'est pas www.xyz.com, alors on redirige".
La règle de MS-DOS dit "si le domaine est xyz.com, on redirige"
Tu peux utiliser l'une des deux au choix

Dan
Nullette
et le code tout simple :
CODE
Redirect permanent /http://monsite.com/doc/document.html http://www.monsite.com/doc/document.html


dans un .htaccess à la racine ne suffit pas ?
Julien_B
ok,

Voici le contenu de mon .htaccess :

CODE
RewriteEngine on
RewriteCond %{HTTP_HOST} ^bestofchat.com$
RewriteRule ^(.*)   http://www.bestofchat.com/$1  [QSA,L,R=301]


ça marche pour transformer bestofchat.com en www.bestofchat.com mais pas pour les sous-dossier... donc pour mon forum ça marche pas (et comme disais portekoi, on est jamais logué automatiquement si on vient sans les www)

Merci
Remi
CITATION(Nullette @ lundi 04 juillet 2005, 14h03)
et le code tout simple :
CODE
Redirect permanent /http://monsite.com/doc/document.html http://www.monsite.com/doc/document.html

dans un .htaccess à la racine ne suffit pas ?
*

Non : le premier paramètre d'un redirect doit être une URL dans une forme "base relative" (ex.: "/repertoire/" ou "/"). Un redirect ne teste pas le host.
Nullette
Merci Remi
Remi
CITATION(Dan @ lundi 04 juillet 2005, 13h59)
Le fait que les 2 règles données ne soient pas les mêmes est expliqué dans le post.
La règle que je donne dit "si le domaine n'est pas www.xyz.com, alors on redirige".
La règle de MS-DOS dit "si le domaine est xyz.com, on redirige"
Tu peux utiliser l'une des deux au choix

Dans la première option, il faut juste penser à rajouter un second test quand on a d'autres sous-domaines
du style : "... et si le domaine n'est pas sousdomaine.xyz.com"
car on ramasse *tous* les sous-domaines.
erwinol
L'exemple de Dan provoque une erreur 500 chez moi. J'utilise pourtant l'URL Rewriting depuis un moment et je n'ai jamais eu de soucis.

Je l'ai essayé sur 2 sites et j'ai toujours une erreur 500.
neofutur
Utiliser les vhosts apache ( sous linux de preference IMSTP2.gif wink.gif:

voci un virtualhost qui ne gere pas le www. :

<VirtualHost 212.85.152.23:80>
ServerName feeder.ww7.be
DocumentRoot /home1/virtuals/feeder.ww7.be/html
<Directory "/virtuals/feeder.ww7.be/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

et voila un virtualhost qui ajoute l'alias ( ServerAlias ) www.feeder.ww7.be
<VirtualHost 212.85.152.23:80>
ServerName feeder.ww7.be
ServerAlias www.feeder.ww7.be
DocumentRoot /home1/virtuals/feeder.ww7.be/html
<Directory "/virtuals/feeder.ww7.be/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Dan
CITATION(erwinol @ jeudi 21 juillet 2005, 23h19)
L'exemple de Dan provoque une erreur 500 chez moi. J'utilise pourtant l'URL Rewriting depuis un moment et je n'ai jamais eu de soucis.

Je l'ai essayé sur 2 sites et j'ai toujours une erreur 500.
*

Tu as raison, il y avait une coquille : un espace entre ! et www.monsite.com, alors qu'il n'en faut pas!
J'ai corrigé le post initial. smile.gif
Dan
@ neofutur,

Que le www soit positionné en ServerAlias ne redirigera pas le visiteur vers celui-ci s'il oublie le www dans l'URL.
Un ServerAlias n'est qu'un nom alternatif pour un domaine, rien de plus.

Pour rediriger vers le www il faut une règle de redirection, qu'elle soit dans le fichier .htaccess ou directement dans le httpd.conf.
thick
CITATION(Dan @ lundi 04 juillet 2005, 13h34)
Pour rediriger les pages sans le www vers les mêmes pages avec le www, il suffit de mettre un fichier .htaccess à la racine du site et d'utiliser la règle donnée par MS-DOS 1991, ou la règle inverse:
CODE
RewriteEngine on
RewriteCond %{HTTP_HOST} !www.monsite.com
RewriteRule ^(.*)   http://www.monsite.com/$1  [R=301,QSA,L]


Cette règle demande la redirection si le domaine n'est pas www.monsite.com, elle est plus générale. wink.gif

Dan
*


Quelle est la différence avec cette régle ?

CITATION
RewriteEngine on

RewriteCond %{HTTP_HOST} !www.monsite.com$
RewriteRule (.*) http://www.monsite.com/$1 [R=301,L]
Mamat
Bien a vu d'oeil un "^" au début de la règle....
Dan
CITATION(Mamat @ vendredi 22 juillet 2005, 11h18)
Bien a vu d'oeil un "^" au début de la règle....
*
Qui ne sert d'ailleurs à rien... donc on peut l'enlever.
Une autre différence est l'utilisation du flag QSA, pour forcer la transmission de la query string.

Normalement celle-ci est transmise automatiquement lors de redirections externes, mais j'ai vu des cas de config et/ou version Apache où cela ne marchait pas. Depuis je le rajoute systématiquement wink.gif
erwinol
Merci ça marche smile.gif
Je l'ai mis en place sur 4 de mes sites.
thick
Je viens de prendre un nouvel hébergeur pour tester et j'ai essayé de rediriger avec le Rewrite suivant :
CITATION
RewriteEngine on

RewriteCond %{HTTP_HOST} !www.nomdusite.com$
RewriteRule (.*) http://www.nomdusite.com/$1 [R=301,QSA,L]


comme ça plantait, j'ai mailé le support qui me répond ça :

CITATION
Vous ne pouvez pas utiliser l'URL rewriting pour faire une redirection. L'URLRewriting sert à faire une redirection transparente, c'est à dire que si vous utilisez easywouebe.com, l'URL Rewriting peut faire en sorte que les 2 URL suivantes soient identiques :
-http://easywouebe.com/index.html
-http://www.easywouebe.com/index.html

C'est déjà le cas par défaut.

Pour faire une redirection de l'une sur l'autre, vous pouvez créer une page en PHP qui analyse le nom du domaine et si celui-ci n'est pas le bon, alors il peut rediriger vers le bon.

Par exemple, dans le fichier index.php, vous pouvez mettre le code PHP suivant :
if ($_SERVER["HTTP_HOST"] == "www.nomdusite.com") {header("Location: http://www.nomdusite.com);}

Ce code redirigera vers le nom avec les www si ceux-ci ne sont pas indiqués dans le nom de domaine.
Dan
Le support t'a répondu n'importe quoi ...
CITATION
Vous ne pouvez pas utiliser l'URL rewriting pour faire une redirection.

Si on ne peut pas utiliser l'URL rewriting pour faire des redirections, on en fait quoi ? des frites ? des carambars ? laugh.gif

Quel est cet hébergeur ? Pas OVH tout de même ?
thick
C'est Haisoft que je teste.
Le support est vraiment rapide par rapport à OVH (Dan wink.gif)
J'ai les réponses en quelques minutes.

Voici la dernière réponse
CITATION
L'URL rewriting est fait pour transformer des URL "par derrière" sans que le visiteur voit que cette URL est changée, donc cela permet aux visiteurs de voir les mêmes fichiers avec les www ou sans les www.

Or, notre système autorise par défaut de voir les mêmes fichiers avec ou sans les "www" donc il n'est pas nécessaire d'utiliser l'URL rewriting.

Merci


C'est vraiment rapide car j'ai reçu une autre précision
CITATION
Si vous voulez le faire de manière transparente, vous pouvez utiliser l'URL rewriting.
Par contre, si vous voulez que lorsque votre visiteur entre une adresse, elle soit visiblement transformée, alors il faut utiliser la méthode que je vous ai indiquée.

Merci
Dan
CITATION
Si vous voulez le faire de manière transparente, vous pouvez utiliser l'URL rewriting.
Par contre, si vous voulez que lorsque votre visiteur entre une adresse, elle soit visiblement transformée, alors il faut utiliser la méthode que je vous ai indiquée.

C'est n'importe quoi ! evil.gif

Pour passer de webmaster-hub.(fr|org|info|be...) à www.webmaster-hub.com, je fais bien une réécriture d'URL avec un flag R=301.
Et il y a bien un changement d'URL apparent.

Quant à la nécessité de passer du domaine sans le www au domaine avec le www, ton correspondant me semble ne pas connaître le référencement et les pénalités pour contenu dupliqué.
Les sites -http://easywouebe.com/ et http://www.easywouebe.com/ sont vus par les moteurs comme deux sites distincts avec le même contenu, et la pénalité peut s'appliquer.

Un petit clic sur http://webmaster-hub.fr (.fr sans le www) pour visualiser wink.gif
L'outil du hub montre bien une redirection permanente vers http://www.webmaster-hub.com

Je ne conteste pas que ce soit un bon hébergeur, répondant rapidement, mais il faudrait voir à ne pas raconter n'importe quoi sous le prétexte de rapidité.

Pour moi il faut qu'il révise sa copie !

Dan

<edit: j'ai rendu le lien vers le site sans www inactif pour que Thick ne soit pas une démonstration vivante de mes affirmations>
thick
mdr
Voilà ça m'apprendra à ne pas te consulter avant...
Bon c'est clair que ça serait bien mieux s'ils pouvaient répondre vite et si possible pas des aneries tongue.gif
D'ailleurs, c'est aussi pour ça que j'ai posté car je ne comprenais rien de ce qu'il me disait.
Merci pour les précisions.

Je les relance et je reviens raconter laugh.gif
Dan
Il faut impérativement rediriger le domaine sans www vers le sous-domaine www, sauf s'ils ont un contenu différent.

Une alternative, mais que j'aime moins pour une simple question de perte de pagerank (et oui, ca sert toujours), est d'interdire l'indexation du domaine sans www en faisant une règle de réécriture qui présente un robots.txt différent. Mais là aussi on passe par une réécriture, il vaut donc mieux rediriger le domaine, à mon avis wink.gif

Mais pour ceux que ça tente, voici la recette:
CODE
RewriteCond %{HTTP_HOST} ^domaine.com$
RewriteRule robots.txt robots.noindex.txt [L]

Il faut bien sûr que le fichier robots.noindex.txt comprenne les instructions de non-indexation wink.gif

Dan
thick
Woow là tu m'as perdu Dan. :o

Par contre, j'ai une autre question stupide : dans le même .htaccess il est possible de mélanger les 2 types de façon d'écrire le code ?
RedirectPermanent etc... et RewriteCond etc...
C'est à dire si on utilise RewriteCond pour faire la bidouille sur le www, est-ce que pour la suite des événements on peut écrire RedirectPermanent pour les autres URLs ?
Dan
On peut bien sûr utiliser les deux directives simultanément, mais souvent une règle bien écrite permet de tout rediriger si on reste dans la même arborescence.

Je t'ai déjà donné l'exemple de http://webmaster-hub.fr mais cette page fonctionne tout aussi bien (en .be pour changer)
http://webmaster-hub.be/index.php?showtopi...20&#entry114236

C'est une seule règle, et c'est bien une redirection 301. Aucun risque donc de pénalité pour contenu dupliqué. wink.gif

Dan
thick
Merci pour ces précisions.

J'ai relancé l'hébergeur en reformulant ton post plus haut et voici la réponse

CITATION
La redirection 301 ne se fait pas avec de l'URL rewriting, mais avec une autre directive : RedirectPermanent
C'est véritablement une redirection, de même pour la réponse 302 qui utilise une autre directive, ou bien le code que je vous ai indiqué plus haut.


Dan, j'imagine déjà ta tête là laugh.gif


Nouvelle réponse
CITATION
Non, RewriteCond est en interne du serveur, et convertit une URL publique en un nom de fichier interne, alors que RedirectPermanent renvoie l'erreur 301 en indiquant la nouvelle URL.
Dan
Je pense qu'il faut arrêter de lui poser des questions pour lesquelles il ne connaît pas la réponse.

RewriteCond ne convertit rien, c'est une condition... pas une réécriture.
Il ne se compare donc pas du tout avec RedirectPermanent sad.gif

Tu peux le renvoyer sur le site apache.org, je pense qu'il y aura pas mal de choses à apprendre.

La page qui traite de mod_rewrite ( http://httpd.apache.org/docs/1.3/mod/mod_r...tml#RewriteRule ) dit notamment pour le flag [R] à mettre dans une RewriteRule:
CITATION
'redirect|R [=code]' ([B]force redirect)[/b]
Prefix Substitution with http://thishost[:thisport]/ (which makes the new URL a URI) to force a external redirection. If no code is given a HTTP response of 302 (MOVED TEMPORARILY) is used. If you want to use other response codes in the range 300-400 just specify them as a number or use one of the following symbolic names: temp (default), permanent, seeother. Use it for rules which should canonicalize the URL and give it back to the client, e.g., translate ``/~'' into ``/u/'' or always append a slash to /u/user, etc.

Je ne vais pas lui copier le manuel d'Apache tout de même ? On voit bien le mot "redirect" dans ce texte ?

Et quant à l'utilisation du module mod_rewrite, je ne pense pas passer pour farfelu si j'annonce que j'ai une tendance profonde à suivre les recommandations d'Apache, plutôt que les sonneries (avec un s comme dans crocodile) du technicien Haisoft. laugh.gif

Dan

PS: et pour info, dis-lui que RedirectPermanent ne renvoie pas une erreur 301, mais une entête 301!
thick
Yes, j'arrête de lui poser des questions car je crois qu'on est au bout du dialogue. tongue.gif

Bon, je suppose qu'il me reste à coller l'include sur toutes les pages du site car RewriteCond ne veut pas marcher.

Pour reprendre du début, à la place du RewriteCond dans le .htaccess, je colle l'include suivante en début de chaque page (avant le doctype) et c'est bon ?
Le but est toujours de rediriger le -http://site.com vers -http://www.site.com

CODE
<?
if ($_SERVER["HTTP_HOST"] == "www.nomdusite.com") {header("Location: http://www.nomdusite.com);}
?>
Dan
Non, surtout pas! L'exemple qu'il t'a donné n'est même pas bon laugh.gif

Sa règle dit "si le host est www.nomdusite.com" alors on redirige vers www.nomdusite.com...
Puis on repart avec une nouvelle interprétation de cette règle, donc on va boucler à l'infini. !

Il faut plutôt mettre:
CODE
<?
if ($_SERVER["HTTP_HOST"] != "www.nomdusite.com") {header("Location: http://www.nomdusite.com");}
?>

Note la subtile différence: != au lieu de == laugh.gif

Mais cette règle ne permet que la redirection de n'importe quelle page du site sans www vers la racine de www.domaine.com sad.gif
Elle devrait être modifiée correctement! Tu lui demandes ou tu préfères que je te donne la solution ? laugh.gif PTDR !
Dan
Allez, ces divagations du support m'ont mises de bonne humeur. Voici une règle qui marchera pour toutes les pages wink.gif

CODE
<?
if ($_SERVER["HTTP_HOST"] != "www.nomdusite.com") {
    header ('HTTP/1.1 301 Moved Permanently');
    header("Location: http://www.nomdusite.com".$_SERVER['PHP_SELF']);
}
?>
thick
Bon là, je crois que c'est le pompom mdr mdr mdr
Heureusement que je suis venu valider l'include par notre Dan bien aimé wink.gif
Merci

Je vais de ce pas me prendre un autre hébergeur à tester tongue.gif
Dan
Je dois reconnaître que si j'avais au départ un a-priori favorable pour cet hébergeur, les réponses que t'on données le support me laissent perplexe.
Je ne prendrai jamais le risque de le recommander à quiconque. sad.gif
Poppy
CITATION(Dan @ lundi 04 juillet 2005, 13h34)
Pour rediriger les pages sans le www vers les mêmes pages avec le www, il suffit de mettre un fichier .htaccess à la racine du site et d'utiliser la règle donnée par MS-DOS 1991, ou la règle inverse:
CODE
RewriteEngine on
RewriteCond %{HTTP_HOST} !www.monsite.com
RewriteRule ^(.*)   http://www.monsite.com/$1  [R=301,QSA,L]


Cette règle demande la redirection si le domaine n'est pas www.monsite.com, elle est plus générale. wink.gif

Dan
*

Merci, ça m'a bien servi Dan wink.gif
Dudu
CITATION(Dan @ vendredi 29 juillet 2005, 15h06)
if ($_SERVER["HTTP_HOST"] != "www.nomdusite.com") {
    header ('HTTP/1.1 301 Moved Permanently');
    header("Location: http://www.nomdusite.com".$_SERVER['PHP_SELF']);
}
?>
*

Salut Dan

Je ne suis pas fortiche en PHP, mais çà ne risque pas de saborder les sous-domaines ta condition ?
$_SERVER["HTTP_HOST"] renvoie sousdomaine.ndd.com, non ? unsure.gif
Dan
Effectivement, pris isolément cela pourrait saborder les sous-domaines. Mais la question n'est pas là parce que normalement un sous-domaine n'a pas le même espace web, donc ce code ne sera pas exécuté.

Capice ? wink.gif

Dan
thick
CITATION(Poppy @ vendredi 29 juillet 2005, 18h50)
Merci, ça m'a bien servi Dan wink.gif
*


Moi aussi jusqu'à ce que je tombe sur un hébergeur qui n'en veuille pas laugh.gif
Mais Super Dan est venu à la rescousse smile.gif
La seule question que je me pose, mon cher Dan, est comment as-tu pû traîner tes savates dans les serveurs depuis 1975 ? Si c'était moi j'aurais transformé depuis longtemps mes serveurs en champ de tir ou j'aurais invité quelques membres d'Al Qaïda à tester leurs engins de mort pour faire pêter tout ça. IMSTP6.gif
C'est à devenir dingue ces histoires de serveurs (comme si j'avais besoin de ça pour sombrer dans le folie douce) !!!
Dan
Ce n'est pas depuis 1975, mais 1978 laugh.gif Cela m'a valu 3 ans de grâce supplémentaires.

Mais c'est vrai que cela fait un bail. A l'époque, on ne parlait pas encore de TCP/IP... ni d'Internet. Mais j'ai été l'un des premiers à avoir une connexion sur Arpanet. Le premier modem que j'ai acheté à prix d'or était un 120 bauds.. et le fait de passer à 300 bauds l'année suivante était une véritable révolution.

Comme quoi, quand mon ADSL à 2Mbits traîne un peu, j'ai appris à relativiser.

Dommage que je n'ai pas gardé mon premier système Unix, parce qu'à 4MHz et avec 128K (pas 128M) de RAM, c'était la bête de l'époque. Il coûtait le prix d'une voiture sportive Italienne ...

Dan
thick
Je n'étais pas loin, mais à partit du siècle dernier on a des difficultés à dater précisement :o
C'est en tout cas impressionant de savoir que tu as traîné tes guêtres dans les serveurs depuis des millénaires.
Dudu
CITATION(Dan @ vendredi 29 juillet 2005, 22h51)
Effectivement, pris isolément cela pourrait saborder les sous-domaines. Mais la question n'est pas là parce que normalement un sous-domaine n'a pas le même espace web, donc ce code ne sera pas exécuté.

Capice ? wink.gif
*
Capice !

Merci pour les explications smile.gif
Dinostrate
Salut Thick
En vérité, il se pourrait qu'il n'y ait aucune différence...
une autre manière d'écrire la règle...
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.