Jump to content

Redirection 301 Moved Permanently + htaccess ?


Recommended Posts

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

Link to post
Share on other 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.

Link to post
Share on other 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 :)

Link to post
Share on other 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();
?>

Link to post
Share on other 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à.

Link to post
Share on other 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

Link to post
Share on other 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

Link to post
Share on other 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

Link to post
Share on other 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$

Link to post
Share on other 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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By cyberdede
      Bonjour à tous

      je voudrais quand je tape https;//monsite/dossier accéder à https;//monsite/dossier/index.php
      or j'accède à https;//monsite/dossier/ avec un 404

      en localhost ca fonctionne

      pour la racine https;//monsite c'est ok

      mon htaccess
       
      RewriteEngine On Options -Indexes RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] RewriteCond %{HTTPS} ^off$ [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] AddDefaultCharset UTF-8 ErrorDocument 404 /404.php  
    • By kevinjoseph
      Bonjour, j’ai un gros problème sur mon site Wordpress . Du jour au lendemain, mon site wordpress fais une redirection vers un autre site wordpress que j’ai crée ,sans que je touche à quoi que ce soit. Quand j’essai d’aller sur l’admin pour désactiver les plugins et voir d’où peut venir le problème. Impossible d’accéder, sa me redirige vers l’admin de l’autre site. Au final il est impossible que j’accède au site via (google, la bare de recherche, les favoris, l’admin…) pour voir ce qu’il fonction pas, j’ai juste accès au FTP. J'ai essayé de voir d'où pouvez venir ce bug en supprimant les plugins, le théme, mes derniers modifications, regarder sur le .htaccess si il y avais quelque par le nom de domaine de l'autre site écrit. Ca n'a rien changer, le site continue de ce rediriger automatiquement vers l'autre site. Si vous avez une idée d’où sa peut venir ou comment faire pour arranger ça et surtout comment éviter que sa ce reproduise. Sa m’aiderai beaucoup, merci d’avance.
      voici le code du .htaccess:
       
      # BEGIN WordPress
      <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
      </IfModule>

      # END WordPress
      ~   Ludovic • 16:28    
    • By leobk
      Bonjour,
       
      J'ai un sous-domaine www.fr.monsite.com dédié pour la réservation des vols
      j'ai redirigé récemment ce sous-domaine vers le site principal www.monsite.com et le nombre des erreurs 404 a explosé
      un nombre énorme d'URLs de type :
      www.fr.monsite.com/fr/vols/index?f_type=01&f_departure=TLS&f_destination=DJE&f_date_from=08/09/2013&f_date_to=22/09/2013&f_flexibility=3&f_paxs_adults=2&f_paxs_childs=0&f_paxs_infants=0
      redirigent vers :
      www.monsite.com/fr/vols/index?f_type=01&f_departure=TLS&f_destination=DJE&f_date_from=08/09/2013&f_date_to=22/09/2013&f_flexibility=3&f_paxs_adults=2&f_paxs_childs=0&f_paxs_infants=0
       
      L'URL de destination est biensur introuvable 404, puisque les variables utilisés dans les deux sites ne sont pas identiques
      Voici la structure d'URL si on fait une recherche de vol sur le site principal :
      https://www.monsite.com/fr/resa?depart=SXF&arrivee=NBE&aller=2017-11-10&retour=2017-11-30&adultes=1&enfants=1&bebes=0&departureDateTime_D=&arrivalDateTime_D=&departureDateTime_R=&arrivalDateTime_R=&fareGroupName=&fareGroupName_R=&sens=2&currency=EUR&airline=&flightNumber=&flight=&flight_retour=&webview=0&felxibilite=2
       
       
      existe-il un moyen pour rediriger l'ensemble des URLs dynamiques du sous-domaines vers une URL statique du domaine principale (autre que l'accueil)?
       
       
    • By PieceMobile
      Bonjour,



      J'espère que vous allez tous bien.



      Auriez vous une solution pour rediriger ( via une règle htaccess par exemple ) :



      http://www.mon-site.com/blabla.html?ps_mobile_site=1



      vers : http://www.mon-site.com/blabla.html



      A mon avis, s'agissant d'un paramètre d'URL, de ce que j'ai cru comprendre -a mon petit niveau- c’était pas possible, mais ça me dépannerai pas mal si l'un d'entre vous avait une idée.



      Merci d'avance





×
×
  • Create New...