IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Apache Discussion :

[URLRewriting] URL Rewrite avec Language


Sujet :

Apache

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut [URLRewriting] URL Rewrite avec Language
    Ok j'ai un serveur qui contient trois sites avec un .htaccess à la racine pour que chaque nom de domaine soit redirigé à la bonne place.

    Maintenant, un de ces sites est bilingue et se trouve dans le répertoire /kwn/. La version anglaise est dans le répertoire /kwn/en/ et la version française est dans le répertoire /kwn/fr/.

    Une fois dans le répertoire /kwn/ j'aimerais vérifier la langue du browser et rediriger dans le répertoire en question sans toutefois que l'URL change. Autrement dit, le nom de domaine http://www.mondomaine.com/ est pointé dans le répertoire /kwn/. J'aimerais que, l'utilisateur soit rediriger vers http://www.mondomaine.com/fr/ ou http://www.mondomaine.com/en/ automatiquement dépendant la langue du browser tout en gardant l'URL http://www.mondomaine.com/.

    Est-ce possible?

    Merci

  2. #2
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Au départ, j'aurais dit « non ce n'est pas possible » car d'après la doc officielle, la valeur de HTTP_ACCEPT_LANGUAGE ne peut pas être utilisée dans les conditions de mod_rewrite.

    Mais en cherchant un peu, je suis tombé sur un exemple qui devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    RewriteEngine On
     
    RewriteBase /
     
    RewriteCond %{HTTP:Accept-Language} ^.*de.*$ [NC]
    RewriteRule ^(index.php)?$ http://www.domain.com/de/ [L,R=301]
     
    RewriteCond %{HTTP:Accept-Language} ^.*en.*$ [NC]
    RewriteRule ^(index.php)?$ http://www.domain.com/en/ [L,R=301]
     
    RewriteRule ^(index.php)?$ http://www.domain.com/fr/ [L,R=301]

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Super merci ca redirige super bien

    mais ca ne masque pas l'adresse

  4. #4
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Oui, ce n'était qu'un exemple, non adapté à tes besoins.

    Je ne connais pas très bien mod_rewrite, mais ça va peut-être te servir de piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RewriteEngine On
     
    RewriteBase /
     
    RewriteCond %{HTTP:Accept-Language} ^.*fr.*$ [NC]
    RewriteRule ^(*+)$ /fr/$1 [L]
     
    RewriteRule ^(*+)$ /en/$1 [L]
    Ca devrait mettre l'anglais par défaut pour tes visiteurs non francophones... si ça fonctionne bien sûr

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Cette nouvelle version ne fonctionne pas lol mais la première oui.

    Mais le plus important pour moi est de cacher l'adresse car j'aurais pu rediriger en PHP aussi...

  6. #6
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Dans le premier code, l'adresse changeait car c'était une redirection externe (le 'R' dans [L, R=301] qui disait au navigateur d'aller sur une autre page. De plus, elle ne prenait en compte que la page index.php.

    Je n'ai pas mod_rewrite sous la main, donc il va falloir que tu cherches de ton côté ce qui ne va pas avec mon code. Les logs d'apache devraient t'aider.

    Edit : je viens de remarquer une sacrée bêtise dans mon code. Peut-être ça ira mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RewriteEngine On
    
    RewriteBase /
    
    RewriteCond %{HTTP:Accept-Language} ^.*fr.*$ [NC]
    RewriteRule ^(.*)$ /fr/$1 [L]
    
    RewriteRule ^(.*)$ /en/$1 [L]
    J'hésitais à mettre .* ou .+ et ça s'est terminé en *+

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    En fait il semble que ni le .* ni le .+ fonctionne, j'ai la même erreur:

    "The page isn't redirecting properly"

    Et je n'ai pas accès à ces logs malheureusement Je ne suis pas le sysadmin...

  8. #8
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Et si tu mets http://..../kvn/fr ou /kvn/fr au lieu de /fr (même chose pour /en) ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Non j'avais essayé

    Mais j'ai trouvé ceci qui semble fonctionner à merveille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RewriteEngine on
    RewriteCond %{HTTP:Accept-Language} ^.*en.*$ [NC]
    RewriteRule ^/?$ /en/ [NC]
     
    RewriteEngine on
    RewriteCond %{HTTP:Accept-Language} ^.*fr.*$ [NC]
    RewriteRule ^/?$ /fr/ [NC]
    Il ne me reste qu'à vérifier si le root est le root de /kwn/fr/ ou /kwn/en/ ou s'il est le /kwn/ ce qui ne m'avancerais à rien lol

    Merci beaucoup tu m'as beaucoup aidé!

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Mouin...je viens de réaliser que ce n'est pas le bon root...mmm...

  11. #11
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Pour un visiteur qui demande /, ça sera toujours par rapport à kwn.

    Ton expression régulière ne marche, je suppose, que quand il demande la racine.

    Avec (.*) dans mon code, j'essayais de récupérer le nom de la ressource demandée et comme ça rediriger dans /fr/ressource ou /en/ressource.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Quand j'utilise cette façon, il m'envoie à:

    kwn/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/en/

  13. #13
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Remets l'option [L] , ça signifie "Last" pour éviter ce genre de boucles

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Je ne l'avais pas enlevé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RewriteEngine On
     
    RewriteBase /
     
    RewriteCond %{HTTP:Accept-Language} ^.*fr.*$ [NC]
    RewriteRule ^(.*)$ http://www.domaine.com/fr/$1 [L]
     
    RewriteRule ^(.*)$ http://www.domaine.com/en/$1 [L]

  15. #15
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    OK. Dans ton dernier code, je ne l'avais pas vu, donc je croyais que tu l'avais zappé

    Après un petit combat contre mod_rewrite, je pense t'avoir trouvé une solution. J'espère que tu confirmeras que ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <IfModule mod_rewrite.c>
    RewriteEngine On
     
    RewriteCond %{REQUEST_URI} !^/kvn/fr/.*$
    RewriteCond %{HTTP:Accept-Language} ^.*fr.*$ [NC]
    RewriteRule ^(.*)$ fr/$1 [L]
     
    RewriteCond %{REQUEST_URI} !^/kvn/en/.*$
    RewriteCond %{HTTP:Accept-Language} !^.*fr.*$ [NC]
    RewriteRule ^(.*)$ en/$1 [L]
     
    </IfModule>
    Le problème venait d'une réécriture infinie... Je croyais que [L] évitait cela, mais (encore une fois) je suis tombé dans le panneau.

    Le code peut sûrement être amélioré mais je m'y connais pas assez. De plus, j'ai supposé que ton répertoire kvn est à la racine. Sinon il faut changer le !^/kvn/ sur les deux lignes concernées.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 440
    Points : 184
    Points
    184
    Par défaut
    Merveilleux, c'est exactement ce que j'avais besoin!

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. URL Rewriting avec GET (et "+")
    Par supertino7 dans le forum Apache
    Réponses: 6
    Dernier message: 10/11/2008, 20h35
  2. [URL Rewriting] avec titres textuels
    Par dl_jarod dans le forum Apache
    Réponses: 13
    Dernier message: 23/01/2008, 14h13
  3. url rewriting avec tomcat en standalone
    Par julien20vt dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 18/01/2008, 13h59
  4. URL Rewriting avec lettres
    Par Alexandrebox dans le forum Apache
    Réponses: 7
    Dernier message: 22/11/2007, 13h22
  5. Si vous avez des questions sur Apache, HTAccess, URL rewriting avec Apache, etc
    Par Marc Lussac dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 28/08/2007, 19h09

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