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 :

[URL Rewriting] Réécriture en fonction de la langue


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut [URL Rewriting] Réécriture en fonction de la langue
    Re-bonjour ...

    J'espère que je vais pas trop flooder la section ... et que je ne vais pas trop passer pour un boulet

    J'essaye "desesperement" de faire marcher ces |#\^`#~ de redirections et a priori je suis loin d'avoir tout compris à l'url rewriting.

    Ce que je veux :
    Lorsqu'un utilisateur tappe :

    1) www.monsite.com il est redirigé vers www.monsite.com/fr/index.html
    2) www.monsite.com/fr ou www.monsite.com/fr/ il est redirigé vers www.monsite.com/fr/index.html
    2bis) www.monsite.com/en ou www.monsite.com/en/ il est redirigé vers www.monsite.com/en/index.html
    3) www.monsite.com/test.html il est redirigé vers www.monsite.com/fr/test.html

    Les points 1) et 2) ont l'air de marcher correctement ...
    Mais pour le 3, il n'est redirigé nul part (et ca affiche donc www.monsite.com/test.html).
    Et pour le 2bis j'arrive pas à récupérer le "/fr/" ou le "/en/" dans l'URL.

    RewriteRule ^(fr|en)$ $1/ [R]

    RewriteCond %{HTTP_HOST} ^www.monsite.com$
    RewriteCond %{REQUEST_URI} ^/(?!fr|en)$
    RewriteRule ^(.*)$ /fr/index.html [R=301]

    RewriteCond %{HTTP_HOST} ^www.monsite.com$
    RewriteCond %{REQUEST_URI} ^/(.*)/$
    RewriteRule ^(.*)$ /fr/index.html [R=301]
    Dans mon esprit :
    - regle 1 : si il n'a pas mis de / apres www.monsite.com/fr ou www.monsite.com/en alors je le rajoute
    - regle 2 : si il n'y a pas de fr ou de en alors je le redirige vers le fr
    - regle 3 : si il a ecrit /fr/ ou /en/ pour le moment je le redirige uniquement vers le /fr/ vu que j'arrive pas a le catcher

    Peut etre que je me suis pris la tete pour rien et que ya une solution "simple" ...
    En attente d'une aide précieuse (Mac .. si tu m'entends ... )

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Hello,

    Question : tu héberges plusieurs domaines pour avoir mis RewriteCond %{HTTP_HOST} ^www.monsite.com$ ? Le plus simple à mon avis, c'est de mettre tes règles de réécriture à la racine du document root de ton domaine, comme ça tu te passes de cette vérification.

    Alors, à tout hasard, sans bien avoir testé, si je prends tes besoins un par un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    RewriteEngine on
    # 1) http://www.monsite.com/ => http://www.monsite.com/fr/index.html
    # 2a) http://www.monsite.com/fr[/] => http://www.monsite.com/fr/index.html
    RewriteRule ^(fr/?)?$ /fr/index.html [R=301,L]
     
    # 2b) http://www.monsite.com/en[/] => http://www.monsite.com/fr/index.html
    RewriteRule ^en/?$ /en/index.html [R=301,L]
     
    # 3) http://www.monsite.com/test.html => http://www.monsite.com/fr/test.html
    # Julp a peut-etre une syntaxe avec RedirectMatch que je n'ai pas trouvee
    RewriteCond %{REQUEST_URI} !^/(fr|en)/?
    RewriteRule ^(.*)$ /fr/$1 [R=301,L]

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    Merci pour ta réponse.

    A la lecture des 1) 2) 2b) je me rends bien compte de mes lacunes lol

    Par contre le 3) ne marche toujours pas (et oui j'héberge plusieurs domaines) :

    Quand j'utilise les règles ci dessous :
    RewriteCond %{REQUEST_URI} !^/(fr|en)/?
    RewriteRule ^(.*)$ /fr/$1 [R=301,L]

    RewriteRule ^(fr|en)/(.*)\.html(.*)$ /$2.php\?language=$1 [L,QSA]
    RewriteRule ^(fr|en)/(.*)\.php(.*)$ /$2.php\?language=$1 [L,QSA]
    Il "boucle" et me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://www.monsite.com/fr/index.php?language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr&language=fr
    Avec comme résultat sur la page "Redirection de page incorrecte"

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Ce qui est surprenant et pas normal c'est qu'il y a une redirection client. Faut regarder pourquoi il fait ça.

    EDIT : c'est parce qu'Apache repart sur la règle 2a, alors qu'il y a un L. Carrément pas normal

  5. #5
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    J'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    RewriteEngine on
    
    RewriteRule ^(fr|en)/(.*)\.html(.*)$ /$2.php\?language=$1 [QSA,L]
    
    RewriteRule ^(fr/?)?$ /fr/index.html [R=301,L]
    RewriteRule ^en/?$ /en/index.html [R=301,L]
    
    RewriteCond %{REQUEST_URI} !^/(fr|en)/?
    RewriteRule ^(.*)$ /fr/$1 [R=301,NS,L]
    Ca marche en rajoutant un NS dans la règle 2a.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    Je viens aussi de trouver une solution en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    Ca fonctionne "comme je veux" mais jvais quand meme voir avec ton "NS"
    Merci Mac pour ton temps

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/01/2008, 17h01
  2. [URL Rewriting] Réécriture d'URL comportant %25
    Par djanke dans le forum Apache
    Réponses: 5
    Dernier message: 19/12/2007, 12h24
  3. [URL Rewriting] Réécriture sur entête HTTP
    Par dedz dans le forum Apache
    Réponses: 11
    Dernier message: 16/12/2007, 17h08
  4. [URL Rewriting] Réécriture et espaces
    Par iwf-fr dans le forum Apache
    Réponses: 5
    Dernier message: 02/09/2007, 14h33

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