sdalmas Posté 21 Octobre 2011 Posté 21 Octobre 2011 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ériquefunction 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
Aenoa Posté 21 Octobre 2011 Posté 21 Octobre 2011 pour que l'adresse reste en "titi.com/" il faudra faire du rewriting Sinon, pour ton "if" de pays, un "Switch" serait plus adapté. http://php.net/manual/fr/control-structures.switch.php Cordialement,
Ernestine Posté 21 Octobre 2011 Posté 21 Octobre 2011 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.
Dudu Posté 28 Octobre 2011 Posté 28 Octobre 2011 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
sdalmas Posté 28 Octobre 2011 Auteur Posté 28 Octobre 2011 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éemysql_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ériquefunction 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 : TNswitch ($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();?>
Anonymus Posté 4 Novembre 2011 Posté 4 Novembre 2011 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à.
desabillemoi Posté 7 Novembre 2012 Posté 7 Novembre 2012 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
Dan Posté 7 Novembre 2012 Posté 7 Novembre 2012 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 OnGeoIPDBFile /path/to/GeoIP.dat# Redirect one countryRewriteEngine onRewriteCond %{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
desabillemoi Posté 7 Novembre 2012 Posté 7 Novembre 2012 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 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
Dan Posté 7 Novembre 2012 Posté 7 Novembre 2012 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$
desabillemoi Posté 8 Novembre 2012 Posté 8 Novembre 2012 Parce que tu as tout mis sur une ligne C'est comme ceci que tu dois l'écrire : RewriteEngine onRewriteCond %{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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant