Boucle de redirection

Discussion dans 'URL Rewriting et .htaccess' créé par smit, 8 Décembre 2015.

  1. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    Bonjour,

    J'ai un fichier .htaccess dans lequel j'ai inserer un code qui redirige les visiteur en fonction de leur pays.
    Toute fois j'ai une boucle de mauvaise redirection.

    J'ai lu le tuto sur les boucles de redirection qui semble tout à fait répondre à mon problème, mais n'arrive pas à adapter le script à mon propre code (...développeur très junior!!!):

    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US [NC]
    RewriteRule ^$ /?lang=us [L,R=301]

    Si quelqu'un peut m'aider...!!!


    Merci beaucoup!!
     
  2. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    Pers n'a une réponse...???
     
  3. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Ce qui se passe ici en gros, c'est que http://www.site.com/ sera redirigé vers http://www.site.com/?lang=us si l'utilisateur est US. Mais la règle produit une boucle car ^$ match à chaque fois.

    Astuce pour votre cas:

    Code:
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US [NC]
    RewriteCond %{QUERY_STRING} !^lang=us$ [NC]
    RewriteRule ^$ /?lang=us [L,R=301]
     
  4. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    Bonjour Giustino!

    Merci pour ta réponse! toutefois pour un IP US, cet réécriture renverra vers ?lang=US dans tout les cas même si je sélectionne Lang=Fr. J'ai un site multi lingue donc cette solution n'est pas possible dans mon cas !
    Ce qu il faudrait c'est dire qu'une fois que la redirection à été faite une fois , il s’arrête et ne prend plus ça en compte. je pense que c'est ce que tu as fais avec REDIRECT_BREAK dans le tuto si bien expliqué sur les boucles de redirection, mais que je n'arrive pas à transposer dans mon cas.

    Si tu as une autre solution je suis preneuse!!!! Merci encore!
     
  5. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Je ne suis pas certains de bien comprendre car avec le code que j'ai donné précédemment, l'utilisateur ne sera redirigé que si il est US et que l'url ne contient pas déjà "lang=us" en paramètre. On évite donc la boucle. Peux-tu préciser le problème dans ce cas précis ?

    Par contre, que ce ne soit pas générique pour un site multilingue, ça, je veux bien l'admettre. Mais il y a une solution à ça également :)
     
  6. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    En effet pour être plus précise, si je suis française au US, que je clik sur français (lang=fr), je rentre dans la condition qui dit que lang=US n’apparait pas dans l'url et je serais donc automatiquement reconduite vers lang=US. (autrement dit au US je n'aurais accès qu'a lang=US, en Espagne à lang=ES...)

    Je tiens de plus à préciser, qu'une fois que la langue à été choisie, le paramètre de langue n’apparait plus systématiquement dans les URL des pages internes de navigation.
    exemple:
    - je suis sur ma Home page, je sélectionne Italie, je vais avoir: www.MonSite.com/?lang=it
    - Une fois sur le menu italien je sélectionne un articles: www.MonSite.com/TitreDeMonArticle --> je n'ai plus de paramètre de langue.

    Ce n'est pas moi qui ai conçu ce site, je dois simplement rediriger le visiteur en fonction de son pays (mais le visiteur doit bien entendu pouvoir choisir une langue qui soit différente de celle du pays dans lequel il se trouve ).

    Voila, j’espère avoir été un petit peu plus claire.... Merci pour votre aide!
    Et très bonne journée!!! :D
     
  7. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Ah oui en effet, il y a un gros soucis de mise en place pour ce système :D

    Du coup, impossible de passer par un htaccess pour faire ce boulot :?

    Néanmoins, c'est possible dans le code de l'index directement, mais il faut que je sois certains d'une chose:
    Si tu n'es plus sur la page d'accueil, peux-tu de nouveau sélectionner une langue ? Si oui, le "?lang=xx" est il postfixé à l'url courante ou bien es-tu redirigé vers l'index "/?lang=xx" ?
     
  8. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    Zuut!!!!!

    Quand je ne suis plus sur la page d'accueil, je peux de nouveau sélectionner une langue, la barre de langue est disponible sur toutes les pages du site.

    Toutes fois j'ai 2 type de sites:

    Au clik sur une langue différente de celle en cours:

    1) le premier va ajouter le paramètre de langue dans l'url ce qui va me donner accès au menu de la nouvelle langue choisie.
    ex: MonSite.com/monArticleEnAnglais/?lang=IT

    2) Le deuxième va me reconduire sur la home page de la langue sélectionnée sous cette forme
    ex: MonSite.com/IT/?lang=IT

    J'ai donc 2 fonctionnements quelques peu différents.

    J’espère que tu m'a comprise...
    Merci beaucoup beaucoup!!!! :)
     
  9. FortTrafic
    FortTrafic WRInaute passionné
    Inscrit:
    11 Décembre 2012
    Messages:
    1 210
    J'aime reçus:
    18
    Est-ce que tu ne peux pas rajouter justement la condition (pas testé) comme quoi il ne doit avoir mis aucune langue :
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US [NC]
    RewriteCond %{QUERY_STRING} !^lang=$ [NC]
    RewriteRule ^$ /?lang=us [L,R=301]

    Ca fait que ca ne redirigera les ip US que s'il n'y a aucune lang= sélectionnée.

    A savoir que tu peux aussi lire les cookies dans le htaccess, vu que j'imagine que c'est comme ca que ton site peut se passer de ?lang=XX par la suite de la visite, non?

    RewriteCond %{HTTP_COOKIE} !^lang=us$ [NC]
     
  10. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    J'ai effectivement testé cet solution qui ne fonctionne pas du fait que mes URL ne contiennent pas forcement le paramètre langue. je serais donc reconduite vers lang=US dans tout les cas!

    Par contre l'idée du cookies peut être bonne!!! il faudrait que la condition soit que la variable lang=xx soit définie, (quelque soit sa définition (US FR IT ES...))

    RewriteCond %{HTTP_COOKIE} !^lang=$ [NC]

    je vais essayer ça.
    Panse tu que la syntaxe soit correcte?
     
  11. FortTrafic
    FortTrafic WRInaute passionné
    Inscrit:
    11 Décembre 2012
    Messages:
    1 210
    J'aime reçus:
    18
    Pour la syntaxe je ne sais pas, sans doute qu'il faudrait mettre une expression, à voir, du style (ou autre chose)

    RewriteCond %{HTTP_COOKIE} !^lang=([a-z]+)$ [NC]

    Il faut quand même garder la condition pour l'url en plus du cookie, parce que le htaccess est executé avant la page php qui créé le cookie, sinon il risque de toujours etre créé à lang=us la première fois a cause de la redirection :)
    Mais bon c'est vrai que c'est dans un cas particulier : quand un visiteur IP US sans cookie qui arrive sur une page avec ?lang=fr si tu ne testes pas l'url mais que le cookie alors il sera redirigé.
    C'est vrai que c'est un cas particulier qui peut être ignoré :)
     
  12. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    Je suis désolé je pense que j'avais mal compris ton système en fait.
    Du coup, si tu utilises les cookies pour sauvegarder la langue courante de l'utilisateur, alors oui c'est faisable.

    Néanmoins, on est bien d'accord que ton code ne s'applique qu'à la "root" page ? Car si tu veux qu'elle s'applique partout (voir ta description des liens possibles), alors il faudra également adapter.

    Sinon, en partant du principe que tu crées un cookie "lang" avec une valeur de 2 lettre minuscules décrivant la langue, tu pourrais utiliser la technique citée plus haut:

    Code:
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US [NC]
    RewriteCond %{HTTP_COOKIE} !lang=[a-z]{2} [NC]
    RewriteRule ^$ /?lang=us [L,R=301]
    Scénario:
    cas 1) L'utilisateur arrive pour la première fois (j'entends par là qu'il n'a pas/plus de cookie "lang" actif) sur la "root" page. S'il est de la zone "US" alors il est redirigé vers /?lang=us. Ensuite, pas d'autres redirections car maintenant ton cookie doit exister (tu dois le créer ou le modifier à chaque fois que tu reçois une query string "lang" dans ton url).
    cas 2) L'utilisateur revient plus tard sur la "root" page, et est de la zone "US" (ce dernier point importe peu). Mais il possède déjà le cookie "lang" et n'est donc pas redirigé. S'il clique sur une autre langue, à toi de modifier le cookie en conséquence.
     
  13. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    Bonjour Bonjour!!!

    Je reviens vers vous car mon problème n'est toujours pas résolue....

    En réalité j'ai vérifié et il n'y a pas de cookies pour retenir la langue du navigateur, c'est tout simplement qu'au clik sur une certaine langue le menu apparaît dans cette langue ce qui permet donc d'avoir accès au contenu dans la langue choisie.
    le paramètre langue n’apparaît donc dans l'url qu'au moment du choix de la langue.

    n'y aurait il donc pas un moyen de dire qu une fois l'url réécrite il ne la réécrit plus durant toute la session?

    j 'ai même penser peux être passer par une fonction php tout simplement? qu'en pensez vous?

    Merci beaucoup!!!!!! bonne fin de journée!
     
  14. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    Bonjour, 

    J'ai essayer 2 solutions hier, qui devrait théoriquement marcher mais... ça ne fonctionne pas!

    Solution1
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^FR   //si IP Francais
    RewriteCond %{REQUEST_URI} !(^.$)    // et qu'il n'y a pas de paramettre dans l'URL 
    RewriteRule ^$  /?lang=fr [L,R=301]   //Reconduire sur lang=fr

    Solution2
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^FR   //si IP Francais
    RewriteRule \.info$  /?lang=fr [L,R=301]   //Reconduire, que la home page, vers lang=fr

    Je ne comprend pas pourquoi ces méthodes ne fonctionnent pas? y a t'il des erreurs de syntaxes?

    Merci d'avance pour vos réponses!!!
     
  15. Giustino
    Giustino WRInaute discret
    Inscrit:
    19 Novembre 2011
    Messages:
    141
    J'aime reçus:
    0
    J'ai du mal à comprendre la façon dont fonctionne ce système. Pas de cookie me faisait donc penser que la langue était sauvegardée dans une session utilisateur, mais en lisant ceci j'ai des doutes. Pouvez-vous m'envoyer le lien de votre site en message privé afin de voir comment il fonctionne et ainsi avoir une idée plus précise ?

    En effet, le faire en php serait une bonne idée, mais cela dépend encore une fois de ce qui vient d'être dit juste avant.

    Cela revient à mon premier message, c'est-à-dire

    Code:
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US [NC]
    RewriteCond %{QUERY_STRING} !^lang=us$ [NC]
    RewriteRule ^$ /?lang=us [L,R=301]
    Mais ce n'était pas faisable (voir votre réponse et la discussion qui s'en suit).
     
  16. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    Merci beaucoup pour la réponse!

    Toute fois, la différence avec les solutions que j'ai proposé et ce que vous m'avez fait parvenir, est que ce n'est pas que le paramètre lang qui ne doit pas apparaître, mais que l'url ne contienne aucun paramètres, ce qui revient (solution 2) à dire que seul la home page doit être reconduite! (puisque si je ne suis pas dans la home page, j ai des paramètres dans l'url.)
     
  17. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    {QUERY_STRING} fait référence aux variables transmises au travers de l'url non?
     
  18. -Tony-
    -Tony- Nouveau WRInaute
    Inscrit:
    27 Octobre 2015
    Messages:
    42
    J'aime reçus:
    0
    Hello
    Je me permet d'essayer de donner un coup de main.
    Je pense que préciser explicitement le country code dans la chaine de requete ?lang=XX fait la boucle de redirection, c'est implicitement precisé avec la regle du dessus {ENV:GEOIP_COUNTRY_CODE}
    Essayes ca :

    Code:
    
    #si l'ip est ricaine ou le reste du monde a lexeption des pays ci dessous
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US [NC,OR]
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^(FR|BE|CH|IT|ES) [NC]
    #si la chaine de requete est absente
    RewriteCond %{QUERY_STRING} !^lang=(fr|us|es|be|ch|it)$ [NC]
    #et que c'est la page d'accueil (sans chaine de requête du coup)
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    #on redirige le tout vers la page d'accueil avec la chaine de requete us
    RewriteRule ^(.*)$ /?lang=us [L,R=301]
    
    #si l'ip est italienne
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^IT [NC]
    #si la chaine de requete est absente
    RewriteCond %{QUERY_STRING} !^lang=(fr|us|es|be|ch|it)$ [NC]
    #et que c'est la page d'accueil (sans chaine de requête du coup)
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    #on redirige le tout vers la page d'accueil avec la chaine de requete it
    RewriteRule ^(.*)$ /?lang=it [L,R=301]
    
    #si l'ip est espagnole
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^ES [NC]
    #si la chaine de requete est absente
    RewriteCond %{QUERY_STRING} !^lang=(fr|us|es|be|ch|it)$ [NC]
    #et que c'est la page d'accueil (sans chaine de requête du coup)
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    #on redirige le tout vers la page d'accueil avec la chaine de requete es
    RewriteRule ^(.*)$ /?lang=es [L,R=301]
    
    
    #sinon si c'est francais/belge/suisse
    #si l'ip est francaise, belge ou suisse
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(FR|BE|CH) [NC]
    #si la chaine de requete est absente
    RewriteCond %{QUERY_STRING} !^lang=(fr|us|es|be|ch|it)$ [NC]
    #et que c'est la page d'accueil (sans chaine de requête du coup)
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    #on redirige le tout vers la page d'accueil avec la chaine de requete fr
    RewriteRule ^(.*)$ /?lang=fr [L,R=301]
    
    
     
  19. smit
    smit Nouveau WRInaute
    Inscrit:
    8 Décembre 2015
    Messages:
    11
    J'aime reçus:
    0
    MERCI MERCI MERCI!!!!!!!

    CA MARCHE!!!!!!!!!!!!!!

    RewriteEngine on
    RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^FR [NC]
    RewriteCond %{QUERY_STRING} !^c=(ca|fr|es|uk|de|it)$ [NC]
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    RewriteRule ^(.*)$ /fr/?c=fr [L,R=301]

    Vous m'avez sauvé!!!!! :D :D :D
     
  20. -Tony-
    -Tony- Nouveau WRInaute
    Inscrit:
    27 Octobre 2015
    Messages:
    42
    J'aime reçus:
    0
    Cool :wink:

    Code:
    
    #Je pense néanmoins après réflexion que tu devrais ajouter deux fix.
    #pour éviter d'éventuels problèmes
    
    #1
    #éviter de rediriger localhost par exemple en cas du code php file_get_content
    RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1
    
    #2
    #attends d'autres avis mais il n'est pas souhaitable je pense de rediriger les bots (googlebot,bingbot)
    #vu que l'ip des bots de google est ricaine.....ca va cafouiller.  :mrgreen: 
    RewriteCond %{HTTP_USER_AGENT} !(googlebot|bingbot|DuckDuckBot|Yahoo|msnbot|Exabot|OrangeBot|exeterabotsympa) [NC]
    
    #3
    #surveilles bien error.log et access.log, ajoutes des fix si besoin
    
     
Chargement...
Similar Threads - Boucle redirection Forum Date
Redirect 301 et boucle de redirection dans wordpress URL Rewriting et .htaccess 24 Avril 2015
probleme de redirection puis pb boucle URL Rewriting et .htaccess 26 Mars 2015
Sf2 - Boucle de redirection lors du déploiement Développement d'un site Web ou d'une appli mobile 13 Juin 2014
problème de boucle et de redirection de diverses anciennes pages URL Rewriting et .htaccess 4 Juin 2014
Aide sous domaine, redirection en boucle Administration d'un site Web 29 Mars 2014
Faire pointer le NDD sur un wordpress : erreurs boucle de redirection Noms de domaine et référencement 8 Novembre 2013
TUTORIEL - Eviter les boucles de redirection URL Rewriting et .htaccess 25 Septembre 2013
Redirection /index.html.com vers le .com :: boucle de redirection URL Rewriting et .htaccess 27 Avril 2011
Boucle de redirection (dixit Chrome) mais qui fonctionne "quand même" ! URL Rewriting et .htaccess 13 Janvier 2011
Redirections de mes sites tournent en boucle Netlinking, backlinks, liens et redirections 4 Décembre 2010
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice