Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 100
    Points : 51
    Points
    51

    Par défaut URL rewriting site multilingue

    Bonjour à tous,

    Je suis en train de mettre en place l'RUL rewriting pour gérer un site multilingue, et là je sèche complètement, bon j'avoue que j'aime pas spécialement ce truc...

    Voilà les règles que j'ai rédigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ErrorDocument  404  http://www.monurl.fr/fr/#!page-non-disponible-404
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^(fr|en|nl)/$ index.php?lang=$1 [L,QSA]
    RewriteRule ^(fr|en|nl)/([a-z-*]+)-([a-z-*]+)-([0-9*]+).html$ index.php?lang=$1&tag=$3&code=$4&%{QUERY_STRING} [L,QSA]
    RewriteRule ^(fr|en|nl)/([a-z-*]+)-([a-z*]+).html$ index.php?lang=$1&tag=$3&%{QUERY_STRING} [L,QSA]
    RewriteRule ^index.html$ index.php?&%{QUERY_STRING} [L,QSA]
    Et là lorqu'on demande l'url http://www.monurl.fr/ il me sort une URL de ce type:
    http://www.monurl.fr/fr/?lang=fr&lan...ang=fr&lang=fr
    Et bien sur le site ne fonctionne plus...

    Est ce que mes règles sont OK ? (même si j'en doute fortement !).

    Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 100
    Points : 51
    Points
    51

    Par défaut

    Je continue de chercher, j'ai fait d'autres tests, et là je comprends plus rien...
    J'ai simplifié la règle au maximum voir le code ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^(fr|en|nl)/$ index.php?lang=$1&%{QUERY_STRING} [L]
    Et il continue à me rediriger vers une mauvaise URL...
    Je me suis dit que ça venait peut être du code du site, et donc sur ma page d'index j'ai mis un "return false" pour qu'il ne m'affiche rien, et malgré ça il continue à me rediriger vers l'url pourrie...

    Vous avez une idée ?
    Merci d'avance et bonne soirée !

  3. #3
    Membre habitué Avatar de silfun1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mars 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : mars 2015
    Messages : 108
    Points : 159
    Points
    159

    Par défaut

    Bonjour Wylls,

    Peux-tu nous donner un exemple de redirection que tu souhaite faire ?

    D'après ce que je lis, tu veux faire ceci:
    http://www.monurl.fr -> http://www.monurl.fr/index.php?lang=fr

    Voici ce que je te propose (!! je n'ai pas testé)

    # Si la variables QUERY_STRING est vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{QUERY_STRING} "^$"
    RewriteRule .(fr|en|nl)/?$ index.php?lang=$1 [L,NC,R=301]
    => edit/correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{QUERY_STRING} "^$"
    RewriteCond %{HTTP_HOST} ^www\.monurl\.(fr|en|nl)
    RewriteRule .* index.php?lang=%1 [L,NC,R=301]
    # Si la variables QUERY_STRING n'est pas vide ET ne contient pas dèja la parametre lang (sinon, on tourne en rond)
    # On test la variable HOST pour récupérer l'extension DNS du site web (on place la réponse dans la variable %1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{QUERY_STRING} "!^$"
    RewriteCond %{QUERY_STRING} "!^lang="
    RewriteCond %{HTTP_HOST} ^www\.monurl\.(fr|en|nl)
    RewriteRule /?.*\.php(.+)$ index.php?lang=%1&$1 [L,NC,R=301,QSA]

    - "/?" = permet que la regle fonctionne avec ou pas un slash à la fin.
    - [QSA]
    http://httpd.apache.org/docs/2.2/rew....html#flag_qsa
    Avec le drapeau [QSA], les chaînes de requête peuvent être combinées. La règle par défaut RewriteRule est de supprimer la query string.


    Sinon, tu peux récupérer la langue depuis le navigateur de l'utilisateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{HTTP:Accept-Language} (fr) [NC]
    RewriteRule .* http://www.monurl.fr/index.php?lang=fr [R,L]


    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
    - Ne vous privez pas pour voter pour ma réponse si elle vous plaît bien
    - Ne pas hésiter à cliquer sur "Résolu" quand votre problème posé a trouvé une solution. Et un petit merci fait toujours plaisir
    -- Mon projet principal = http://www.usiscript.com

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 100
    Points : 51
    Points
    51

    Par défaut

    Hello,

    Merci pour ta réponse.
    J'ai testé les règles que tu as donné, et maintenant :
    1. Quand je tape http://www.monurl.fr il n'affiche pas d'erreur mais que je clique sur un lien il me change l'url en http://www.monurl.fr/fr/?lang=fr&lan...ge-30002000786 et il m'affiche une erreur Apache "Not found"
    2. Quand je tape l'url http://www.monurl.fr/fr/ il me direct une erreur Apache "Not found".

    Je ne comprends vraiment pas ce qui se passe, concrètement voilà ce qu'il devrait faire:
    On tape l'URL http://www.monurl.fr, et on est redirigé automatiquement vers l'url http://www.monurl.fr/fr/ et lorsqu'on est sur l'URL http://www.monurl.fr/fr/ il envoie sur l'URL http://www.monurl.fr/index.php?lang=fr
    Et derrière j'ai une application PHP qui utilise les ancres pour fonctionner et donc les url doivent être de la forme:
    http://www.monurl.fr/fr/?lang=fr#!ti...ge-30002000786
    C'est tout !

    Il y a quand même un truc bizarre, j'ai supprimé toutes les régles et lorsque je tape l'URL http://www.monurl.fr il me redirige vers http://www.monurl.fr/FR/... Et je ne vois pas du tout pourquoi, j'ai vérifier les headers PHP, les redirections HTML, et nul part je retrouve pourquoi il fait ça, est-ce que ça pourrait pas venir de là ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    octobre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2006
    Messages : 100
    Points : 51
    Points
    51

    Par défaut

    Finalement ça venait des URL en "www" et celle en "non www", tout mes liens redirigent vers l'url en "www", et je testais avec l'url en "non www".
    Et l'URL en "non www" redirigeait vers le site http://www.monurl.fr/FR/ et donc ça plante à cause du FR en majuscule.

    Est-ce que tu peux donner une règle d'url rewriting pour que l'utilisateur soit redirigé vers l'url http://www.monurl.fr/fr/ s'il tape l'URL http://monurl.fr/FR/ ou http://www.monurl.fr/ ?
    Je vais continuer à chercher d'où vient cette redirection vers le "FR", je vais bien finir par trouver...

  6. #6
    Membre habitué Avatar de silfun1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mars 2015
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : mars 2015
    Messages : 108
    Points : 159
    Points
    159

    Par défaut

    Salut Wylls,

    Si je reprends le but de tes redirections, on a :
    http://www.monurl.fr -> http://www.monurl.fr/fr/
    puis
    http://www.monurl.fr/fr/ -> http://www.monurl.fr/index.php?lang=fr

    Donc, si on résume :
    http://www.monurl.fr -> http://www.monurl.fr/index.php?lang=fr
    http://www.monurl.fr/fr/ -> http://www.monurl.fr/index.php?lang=fr

    Pour le problème de "/fr/" ou "/FR/" = il faut que tu utilise le "Flag NC" du module rewrite de Apache :
    => source = http://httpd.apache.org/docs/2.2/rew...s.html#flag_nc
    "/fr/" ou "/FR/" sont des bouts de ton url. Ils sont situés dans la partie "REQUEST_URI", donc il faut ajouter une condition sur la variable REQUEST_URI dans ta règle.

    - 1 -
    http://www.monurl.fr -> http://www.monurl.fr/index.php?lang=fr

    # Si la variables QUERY_STRING est vide
    variable %1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{QUERY_STRING} "^$"
    RewriteCond %{HTTP_HOST} ^www\.monurl\.(fr|en|nl)
    RewriteRule .* index.php?lang=%1 [L,NC,R=301]
    - 2 -
    http://www.monurl.fr/fr/ -> http://www.monurl.fr/index.php?lang=fr

    # Si la variables QUERY_STRING est vide
    # Si la variable REQUEST_URI contient /fr/ (ou /en/ ou /nl/)
    # On test la variable HOST pour récupérer l'extension DNS du site web (on place la réponse dans la variable %1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{QUERY_STRING} "^$"
    RewriteCond %{REQUEST_URI} ^/(fr|en|nl)/$ [NC]
    RewriteCond %{HTTP_HOST} ^www\.monurl\.(fr|en|nl)
    RewriteRule .* index.php?lang=%1 [L,NC,R=301]
    - 3 -
    # Autres

    # Si la variables QUERY_STRING n'est pas vide ET ne contient pas dèja la parametre lang (sinon, on tourne en rond)
    # On test la variable HOST pour récupérer l'extension DNS du site web (on place la réponse dans la variable %1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{QUERY_STRING} "!^$"
    RewriteCond %{QUERY_STRING} "!^lang="
    RewriteCond %{HTTP_HOST} ^www\.monurl\.(fr|en|nl)
    RewriteRule /?.*\.php(.+)$ index.php?lang=%1&$1 [L,NC,R=301,QSA]


    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
    - Ne vous privez pas pour voter pour ma réponse si elle vous plaît bien
    - Ne pas hésiter à cliquer sur "Résolu" quand votre problème posé a trouvé une solution. Et un petit merci fait toujours plaisir
    -- Mon projet principal = http://www.usiscript.com

Discussions similaires

  1. Réécriture url pour site multilingue
    Par redah75 dans le forum Apache
    Réponses: 29
    Dernier message: 22/12/2009, 17h54
  2. [URL rewriting] Site qui n'est pas à la racine
    Par dkmatt dans le forum Apache
    Réponses: 11
    Dernier message: 07/04/2009, 02h10
  3. Réponses: 1
    Dernier message: 08/02/2008, 11h32
  4. Réponses: 3
    Dernier message: 30/01/2008, 10h15
  5. URL Rewriting et Multilingues
    Par kamkamkam dans le forum Apache
    Réponses: 2
    Dernier message: 18/11/2006, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo