5177 sujets

Le Bar du forum

Administrateur

$redirections = array('www.mon-site.com','www.m-on-site.com','mon-site.com','m-on-site.com');
if(in_array($_SERVER['HTTP_HOST'],$redirections)) {
  header('Location:  http://www.monsite.com'.$_SERVER['REQUEST_URI']);
 
  exit;
}


(si tout passe par un script d'index php c'est mieux...)
(il faut bien entendu configurer les domaines pour pointer sur le même hébergement, et l'hébergement pour répondre à ces noms dans le même vhost)
Modifié par dew (10 Nov 2009 - 17:15)
Ce que propose dew peut également être géré directement par le serveur HTTP.

Pour un serveur Apache, je vois deux méthodes: soit un seul VirtualHost (tous les noms de domaine pointent vers le même dossier du serveur) et l'utilisation de mod_rewrite, soit deux VirtualHost dont un «réel» et l'autre servant juste à rediriger tous les autres noms de domaine.

Avec un seul VirtualHost
Sur un hébergement mutualisé, si tu n'as pas accès à la configuration des VirtualHost, il s'agit de faire pointer tous les noms de domaine vers le même répertoire de l'hébergement.

À la racine de ce répertoire cible, dans lequel tu auras à priori placé ton site web (avec notamment un index.html ou index.php), tu peux avoir un fichier .htaccess avec le contenu suivant:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.monsite\.com [NC]
RewriteRule ^(.*)$  http://www.monsite.com/$1  [R=301,L]

Se qui se lit ainsi, ligne par ligne:
1. On active le module de redirection d'Apache. (Il faut qu'il soit installé sur le serveur de l'hébergement. C'est en général le cas.)
2. On pose une condition avant de réécrire l'adresse demandée par l'utilisateur. La condition, c'est que le HTTP_HOST (la chaine "sous-domaine + domaine" dans l'URL chargée par le visiteur) soit différent de "www.monsite.com".
3. Si la condition est remplie (donc l'utilisateur n'a pas demandé www.monsite.com/...), on redirige toutes les requêtes vers www.monsite.com ou www.monsite.com/quelquechose.

Avec deux VirtualHost
Avec un hébergement mutualisé, il faut configurer le nom de domaine principal pour pointer vers dossier1, et tous les autres domaines pour pointer vers dossier2; dossier1 contiendra le site, tandis que dossier2 sera vide à l'exception d'un fichier .htaccess.

Dans le fichier .htaccess, on va placer le code suivant:
Redirect 301 /  http://www.monsite.com/

Toutes les requêtes qui aboutissent à ce dossier vont être redirigées. Toute la fin de l'URL (après le nom de domaine) sera rajoutée à la redirection, de sorte que si un utilisateur demande mon-site.com/blabla/truc/machin.html il sera redirigé vers www.monsite.com/blabla/truc/machin.html

Plus simple encore
Le registrar qui gère les noms de domaine propose sans doute une fonction pour rediriger un nom de domaine vers une adresse de ton choix. Il faut alors choisir, dans les options disponibles, de faire une «redirection HTTP» ou «redirection visible» ou «redirection transparente» (pas sûr pour ce dernier), suivant la terminologie utilisée par le registrar.

Les inconvénients possibles:
- il se peut que la redirection soit une redirection 302 et pas 301 (c'est parfois gênant pour le référencement);
- il se peut que toutes les requêtes soient redirigées vers la page d'accueil du site.
Au sujet de la solution de dew: personnellement je préfère gérer ça au niveau du serveur.

- D'une part, quand on sait le faire côté serveur, on peut utiliser n'importe quel langage derrière sans incidence majeure sur les redirections (PHP, Python, Ruby, etc.). Il est vrai cependant qu'on peut dire sensiblement la même chose de l'utilisation d'un langage (mettons PHP) sur différents types de serveur (Apache, IIS, lighttpd...).

- Je trouve que c'est plutôt le rôle du serveur que de l'application elle-même de gérer ces choses là. Mais c'est juste mon avis.
Administrateur
Je voulais faire simple... (Et on n'a pas toujours accès à la configuration du serveur, même si c'est bien sûr la manière la plus optimisée).