Aller au contenu

Redirection 301 Moved Permanently + htaccess ?


sdalmas

Sujets conseillés

Bonjour,

J'ai un site d'une seule page portail qui presente 4 ecoles avec leur propre lien, apres les 4 ecoles ont leur propre site geré soit par moi soit par d'autres personnes.

Cette page unique actuellement est située a l'adresse www.titi.com/index.php, depuis 2 - 3 ans et est bien référencée.

aujourdh'ui j'ai du faire la version anglaise (UK) et italienne (IT) de cette page avec détection du pays par l'IP et redirection donc vers la version correspondante.

c'est a dire que maintenant

index.php contient le script de detection IP et redirection vers la version

si FR, on va sur index_fr.htm, si UK sur index_uk.htm etc....

Concernant le referencement pour faire bien comme il faut (!!), j'ai fait dans le script index.php un :

header("HTTP/1.1 301 Moved Permanently");

Voici le code du script PHP simplifié car il fonctionne

<?php
$connexion = mysqli_connect("localhost", "root", "", "my_db");

// Fonction permettant de convertir l'adresse IP en un format numérique
function conversionIP($dotted){
$dotted = preg_split( "/[.]+/", $dotted);
$ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
// IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D
return $ip;
}

$ip = $_SERVER['REMOTE_ADDR']; // Adresse IP du visiteur
$ip = conversionIP($ip); // Utilisation de la fonction pour convertir l'adresse IP

// Sélection des données dans la base de données. Si l'IP est comprise entre IP_FROM et IP_TO
$result = mysqli_query($connexion, "SELECT * FROM ip_to_country WHERE $ip BETWEEN IP_FROM AND IP_TO ") or die (mysqli_error($connexion));
$data = mysqli_fetch_array($result);
$country_code=$data['COUNTRY_CODE'];
if($country_code == 'FR')
{
header("HTTP/1.1 301 Moved Permanently");
header('Location: index_fr.htm');
}
else if($country_code == 'IT')
{
header("HTTP/1.1 301 Moved Permanently");
header('Location: index_it.htm');
}
else
{
header("HTTP/1.1 301 Moved Permanently");
header('Location: index_uk.htm');
}

mysqli_close($connexion);
?>

Est ce que cela suffit pour la redirection, ou dois- egalement faire un .htaccess contenant :

contenant quelque chose comme :

RewriteEngine On

RewriteRule .* http://www.titi.com/

il me semble que non puisque finalement c'est toujours a la page index.php qu'on doit acceder.

la difference est qu'elle ne contient plus les memes choses, elle contient le code qui redirige sur soit index_fr.htm soit ....

Merci de votre reponse

Sand

Lien vers le commentaire
Partager sur d’autres sites

Ce que tu fais n'est pas du tout logique : tu fais trois redirections permanentes à partir d'une unique page !

La meilleure méthode pour ton référencement, c'est de ne pas créer de page index_fr.html, mais uniquement les deux autres, c'est à dire :

- conserver index.php pour la version française (donc pas question de créer un index_fr.html)

- créer index_en.html pour la version anglaise

- créer index_it.html pour la version italienne

Et là il n'y a aucune redirection à faire : tu as juste à placer des liens vers chacune des versions sur les pages d'accueil. Ainsi, Google continuera d'indexer la page française comme il l'a toujours fait (index.php), et indexera les deux autres versions lors de ses prochaines visites.

Par ailleurs, pour rediriger vers la bonne langue, tu ferais mieux de faire ça par détection de la langue du navigateur, plutôt que par l'adresse ip. Mais le mieux est de ne pas faire de détection automatique, et laisser les visiteurs choisir. C'est aussi préférable pour le référencement.

Lien vers le commentaire
Partager sur d’autres sites

Par ailleurs, pour rediriger vers la bonne langue, tu ferais mieux de faire ça par détection de la langue du navigateur, plutôt que par l'adresse ip.

Non, pas forcément.

De tout temps, j'ai laissé mon OS (pas celui dans la gueule de ton avatar) en anglais, pour des raisons que j'ai déjà trop répétées sur ces forums. Mon navigateur, logiquement, suit par défaut la langue de l'OS. Pourtant je suis français, de langue française, et (beaucoup trop) attaché à mon orthographe et ma grammaire françaises.

On peut citer moult exemples de français travaillant dans des entreprises où les postes de travail (donc les navigateurs aussi) sont en anglais, ou encore des expatriés, ou l'inverse (travailleurs expat' bossant en France sur des postes de travail français)... etc...

Non, vraiment, la langue du navigateur, ça ne veut rien dire !

Mais le mieux est de ne pas faire de détection automatique, et laisser les visiteurs choisir. C'est aussi préférable pour le référencement.

Là en revanche, je suis d'accord :)

Lien vers le commentaire
Partager sur d’autres sites

Merci a vous tous de vos reponses (j'avais pas acces a une connexion dernierement), et effectivement j'avais fini par un peu reflechir (!!) et donc oui, pas besoin de redirection :

j'ai gardé mon index.php, crée un index_uk.htm, index_it.htm et c'est tout ...et oui j'ai fait ma boucle conditionnelle avec un switch :

par contre je fais une redirection en fonction du pays, car c'est le client qui veut que ce soit comme ca...apres les internautes ont toujours la possibilité de basculer sur une autre version en cliquant sur les petits flags.

merci

sandrine

pour ceux que ca interesse, voici mon code :

<?php
/*
Message de copyright obligatoire:
"This 'work' uses the IP-to-Country Database
provided by WebHosting.Info (http://www.webhosting.info),
available from http://ip-to-country.webhosting.info."
*/
// Connexion à la base de donnée
mysql_connect('myserver','mydb','mypass');
mysql_select_db('mydb') or die('Echec de selection de la base');

// Fonction permettant de convertir l'adresse IP en un format numérique
function ipAdressNumber($dotted){
$dotted = preg_split( "/[.]+/", $dotted);
$ip = (double) ($dotted[0]*16777216)+($dotted[1]*65536)+($dotted[2]*256)+($dotted[3]);
// IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D
return $ip;
}

$ip = $_SERVER['REMOTE_ADDR']; // Adresse IP du visiteur

//quelques IP pour faire les tests :
//$ip = "82.252.138.206"; //FR
//$ip = "80.247.68.7"; // IT Italy
//$ip = "55.22.18.26"; //US
//$ip = "77.252.138.206"; //PL Poland
//$ip = "82.25.13.20"; //GB Grande Bretagne
//$ip = "155.252.138.206"; //US
//$ip = "182.252.138.206"; //AU Australia
//$ip = "195.252.138.206"; //DE Germany
//$ip = "202.252.138.206"; //JP
/*$ip = "209.252.173.102";*/ //US

$ip = ipAdressNumber($ip); // Utilisation de la fonction pour convertir l'adresse IP

// Sélection des données dans la base de données. Si l'IP est comprise entre IP_FROM et IP_TO
$result = mysql_query("SELECT * FROM ip_to_country WHERE $ip BETWEEN IP_FROM AND IP_TO ");
$data = mysql_fetch_array($result);
$country_code=$data['COUNTRY_CODE'];

//version francaise pour les pays dt le francais est langue officielle ou tres repandu : BELGIQUE : BE, CONGO : CG, SUISSE : CH, CANADA : CA, MAROC : MA, ALGERIA : DZ, TUNISIA : TN

switch ($country_code) {
case ($country_code=='FR' || $country_code=='BE' || $country_code=='CH' || $country_code=='CA' || $country_code=='MA' || $country_code=='DZ' || $country_code=='TN' || $country_code=='CG' || $country_code=='JP'):
//pas de redirection, juste on sort de la boucle
break;
case ($country_code=='IT'):
header('Location: http://www.ecole-maville.com/ecole-maville-it.htm');
break;
default:
header('Location: http://www.ecole-maville.com/ecole-maville-en.htm');
break;
}

mysql_close();
?>

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Juste pour info, il existe 2 fonctions intéressantes que tu pourrais utiliser :
/>http://php.net/manual/en/function.ip2long.php
/>http://www.php.net/manual/en/function.long2ip.php

Pour le reste, je suis plutot d'accord avec Dudu et Ernestine :)

Voilà.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Bonjour,

Je sollicite l'aide de développeurs avertis ! Je dispose de nombreux sites français (.fr / .com) et belges (.be).

Sur mes sites français je génère beaucoup de trafic Belge et vis versa.

J'aimerai trouver le moyen (sous forme d'un htaccess de préférence) de détecter les ip belge arrivant sur mes sites français et de rediriger sur un site en .be

Pareil pour mes sites belges, détection des ip française et redirection sur un .fr

Bien sur je connais le principe de l'htaccess car j'en utilise sur certains de mes sites pour rediriger le trafic mobile sur une url spécifique pour les smartphones (appli mobile, site version mobile...)

On m'a donné ca à placer à la racine du serveur ftp (exemple pour la redirection du trafic belge) mais ca ne fonctionne pas ...

GeoIPEnable On

GeoIPDBFile /path/to/GeoIP.dat

# Redirect one country

RewriteEngine on

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^BE$

RewriteRule ^(.*)$ http://urlredirection.be$1 [R,L]

Merci d'avance pour votre aide.

David

Lien vers le commentaire
Partager sur d’autres sites

Bonjour et bienvenue sur Webmaster-HUb,

On m'a donné ca à placer à la racine du serveur ftp (exemple pour la redirection du trafic belge) mais ca ne fonctionne pas ...

GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat

# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^BE$
RewriteRule ^(.*)$ [url="http://urlredirection.be$1"]http://urlredirection.be$1[/url] [R,L]

C'est bien à la racine du site que tu as mis cela dans un .htaccess ?

Parce que la racine du serveur ftp n'est pas forcément là où pointe ton DOCUMENT_ROOT !

Et tu as bien modifié le chemin du fichier GeoIP.dat ? Il faut aussi que ce fichier soit lisible par Apache wink.gif

Lien vers le commentaire
Partager sur d’autres sites

Bonjour et bienvenue sur Webmaster-HUb,

C'est bien à la racine du site que tu as mis cela dans un .htaccess ?

Parce que la racine du serveur ftp n'est pas forcément là où pointe ton DOCUMENT_ROOT !

Et tu as bien modifié le chemin du fichier GeoIP.dat ? Il faut aussi que ce fichier soit lisible par Apache wink.gif

Bonjour,

Merci pour ta réponse.

En fait mes sites sont chez ovh et ils mettent à disposition ce lien http://guide.ovh.com/GeoIp qui est censé tout expliquer.

Ils disent "Vous n'avez pas besoin d'activer l'option GeoIp dans votre fichier .htaccess.Nous l'avons activer par défaut dans notre configuration"

Donc pas besoin d'avoir la base de données des ip.

J'ai donc modifié le .htaccess comme ceci (sur conseil d'ovh dans le lien ci-dessus) :

RewriteEngine on RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^BE$

RewriteRule ^(.*)$ http://www.urlarediriger.be$1 [L]

=> Le problème c'est qu'il redirige tout le monde ! Quelque soit l'ip ... Donc pas de détection du code pays.

En revanche, lorsque l'on met un .htaccess comme cela (pour bloquer les FR) :

SetEnvIf GEOIP_COUNTRY_CODE FR BlockCountry

Deny from env=BlockCountry

Là ca marche ! Ca bloque bien les FR et que les FR ...

On peut donc déduire qu'il détecte bien les ip des codes pays comme ils le disent.

Mais pourquoi lors de la redirection (1er htaccess) ca redirige tout le monde sans detection du code pays ??

Merci d'avance !

David

Lien vers le commentaire
Partager sur d’autres sites

Parce que tu as tout mis sur une ligne ;)

C'est comme ceci que tu dois l'écrire :


RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^BE$

Lien vers le commentaire
Partager sur d’autres sites

Parce que tu as tout mis sur une ligne wink.gif

C'est comme ceci que tu dois l'écrire :


RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^BE$

Bonjour,

Super ca marche ! Merci beaucoup !

C'est très gentil d'avoir pris le temps de le répondre.

Très bonne continuation.

David

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...