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 :

Réécriture avec code langue en début d'URL


Sujet :

Apache

  1. #21
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Il faut que tu mettes cette règle tout en haut de ton fichier.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    je l'ai mise tout au début mais ça ne change rien, quand je tape https://www.moroccan-arts.com/uk/account ça me redirige toujours vers https://www.moroccan-arts.com/account/?tld=uk

    tu ne penses pas que quelque chose cloque avec cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
    voici mon htaccess en entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    # some PHP rules are set in an .htaccess file in /
     
    ## activate rewriting rules
    RewriteEngine on
     
    ## force trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule .*[^/]$ /$0/ [L,R=301]
     
    ## rewriting rules for the .com, keep only moroccan-arts.com as an official URL for international english
    RewriteCond %{HTTP_HOST} \.com$
    RewriteCond %{HTTP_HOST} !www\.moroccan-arts\.com$
    RewriteRule (.*) http://www.moroccan-arts.com/$1 [L,R=301]
     
    ## rewriting rules for the .co.uk, redirect all to moroccan-arts.com/uk/
    RewriteCond %{HTTP_HOST} \.co\.uk$
    RewriteRule (.*) http://www.moroccan-arts.com/uk/$1 [L,R=301]
     
    ## rewriting rules for the .fr, redirect all to moroccan-arts.com/fr/
    RewriteCond %{HTTP_HOST} \.fr$
    RewriteRule (.*) http://www.moroccan-arts.com/fr/$1 [L,R=301]
     
    ## folders of languages
    RewriteRule ^us/$ / [R,L]
    RewriteRule ^us/(.*)$ /$1 [R,L]
    RewriteRule ^[a-z]{2}$ /$0/ [R,L]
    RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
     
     
    ## catalogue browser
    RewriteRule ^[a-z0-9-]+/[a-z0-9-]+-([0-9]{2})([0-9]{2})/$ /catalogue.php?id_cat1=$1&id_cat3=$2 [QSA,L]
     
    ## product details
    RewriteRule ^[a-z0-9-]+/[a-z0-9-]+-([0-9]{6})\.html$ /product-info.php?id_prod_material=$1 [QSA,L]

  3. #23
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    account est un vrai répertoire qui existe ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Oui, c'est un vrai dossier qui existe!!

    et ce qui est vraiment bizarre dans toute cette histoire c'est qui si je commente cette ligne: RewriteCond %{REQUEST_FILENAME} -d
    site.com/uk/account est redirigé vers site.com/uk/account/
    MAIS site.com/fr/account est redirigé vers site.com/account/?tld=fr

    Je ne comprends plus rien

  5. #25
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    En gros, il y a redirection parce que la première URL réécrite /account?tld=uk correspond à un répertoire qui existe (si tu retires la query string) et qui ne se termine pas par un /, donc au second tour de réécriture, Apache fait la redirection.

    Tu peux mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]{2})/(.*)$ /$2/?tld=$1 [QSA,L]
    mais je ne suis pas sûr que ça aille pour toutes les URL. L'alternative est d'ajouter un paramètre d'URL bidon que tu vérifies dans la règle de redirection sur le répertoire ne se terminant pas par / pour ne pas réécrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ## force trailing slash
    RewriteCond %{QUERY_STRING} !noredirect=true
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule .*[^/]$ /$0/ [L,R=301]
     
    ...
     
    RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1&noredirect=true [QSA,L]

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    On y est presque
    j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     RewriteRule ^([a-z]{2})/(.*)$ /$2/?tld=$1 [QSA,L]
    et ça marche bien a un petit détail près

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule .*[^/]$ /$0/ [L,R=301]
    tout au début comme tu me l'as conseillé, ça ne force pas le slash a la fin site.com/uk/account reste tel quel!

    si par contre je commente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteCond %{REQUEST_FILENAME} -d
    il rajoute le slash a la fin pour les dossiers MAIS il me le rajoute aussi pour la page détails du produits (http://www.moroccan-arts.com/lantern...-4-101115.html)

    sais tu de quoi il peut s'agir??
    Merci infiniment

  7. #27
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Pourquoi tu veux commenter cette ligne si ça marche avec ? Cette ligne sert à dire à Apache d'ajouter un / à la fin d'une URL sans / terminal si cette URL correspond à un vrai répertoire. Donc forcément, si tu retires cette condition, toutes les URL ne se terminant pas par / sont redirigées.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  8. #28
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Ben justement ça ne marche pas quand la ligne est decommentée.
    Il faut que je commente la ligne pour qu'il rajoute les slash a la fin des dossiers, ce qui est très bizarre...!

    La ligne est maintenant commentée, teste et tu verras!

  9. #29
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Je ne sais pas trop ce qu'il se passe. Tu as essayé l'autre solution que j'ai donnée ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  10. #30
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    la je suis en deplqcement et je n'ai pas trop acces a internet. je testerai ce que tu m'as propose des que j'ai l'occas et t'en tiendrai au courant...

    Merci pour tout

  11. #31
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonjour _Mac_

    Tu peux mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]{2})/(.*)$ /$2/?tld=$1 [QSA,L]
    mais je ne suis pas sûr que ça aille pour toutes les URL
    effectivement, ça ne marche pas pour toutes les URL comme par exemple pour http://www.moroccan-arts.com/lantern...-4-101115.html qui me rajoute un slash a la fin!

    L'alternative est d'ajouter un paramètre d'URL bidon que tu vérifies dans la règle de redirection sur le répertoire ne se terminant pas par / pour ne pas réécrire...
    ça non plus ça ne règle pas le problème!

    mais voici la solution que j'ai trouvé et qui a l'air de bien marcher a tous les cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ## activate rewriting engine
    RewriteEngine on
    
    ## force trailing slash
    RewriteCond %{REQUEST_FILENAME} !-f
    #RewriteCond %{REQUEST_FILENAME} -d
    RewriteCond %{REQUEST_URI} !^/.*\.(php|html)$
    RewriteRule .*[^/]$ /$0/ [L,R=301]
    
    ## folders of languages
    RewriteRule ^us/(.*)$ /$1 [R,L]
    RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
    
    ## catalogue browser
    RewriteRule ^[a-z0-9-]+/[a-z0-9-]+-([0-9]{2})([0-9]{2})/$ /catalogue.php?id_cat1=$1&id_cat3=$2 [QSA,L]
    
    ## product details
    RewriteRule ^[a-z0-9-]+/[a-z0-9-]+-([0-9]{6})\.html$ /product-info.php?id_prod_material=$1 [QSA,L]
    J'ai viré la ligne rouge, et rajouté la ligne verte!
    Impressionnant mais ça marche bien! as tu une explication a ceci ? ou y a t il une amélioration du code??

    A bientôt

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonsoir,

    De retour pour quelques détails
    j'ai trouve un "meilleur" code pour forcer un slash a la fin et qui fonctionne bien, je le poste au cas ou ça intéresse quelqu'un

    j'aurais 3 petites dernières question STP

    1- est ce bien utile et important cette histoire de slash a la fin des URL??

    2- quand j'ai une erreur 404, c'est le message en anglais qui est affiché, comment pourrais je conserver le code de la langue?

    3- lorsque je suis sur http://www.moroccan-arts.com/uk/test-index.php et que j'enlève le '-', il me redirige vers http://www.moroccan-arts.com/test-index.php?tld=uk, je pense que ça vient de l'hébergeur, je sais qu'ils ont une sorte de script qui corrige les url, genre tu tapes inde.php, tu es redirigé vers la bonne url qui est index.php. dois je les contacter pour ce problème?

    Merci beaucoup

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    ## activate rewriting engine
    RewriteEngine on
     
    ## force trailing slash
    RewriteCond %{REQUEST_URI} /+[^\.]+$
    RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [L,R=301]
     
    ## folders of languages
    RewriteRule ^us/(.*)$ /$1 [R,L]
    RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
     
    ## catalogue browser
    RewriteRule ^[a-z0-9-]+/[a-z0-9-]+-([0-9]{2})([0-9]{2})/$ /catalogue.php?id_cat1=$1&id_cat3=$2 [QSA,L]
     
    ## product details
    RewriteRule ^[a-z0-9-]+/[a-z0-9-]+-([0-9]{6})\.html$ /product-info.php?id_prod_material=$1 [QSA,L]
     
     
    ## error pages
    ErrorDocument 403 /error-403.html
    ErrorDocument 404 /error-404.html
    ErrorDocument 500 /error-500.html
     
    ## Redirect the error pages (403, 404, 500, javascript deactivated)
    RewriteRule ^error-(403|404|500)\.html$ /error.php?error=$1 [QSA,L]

  13. #33
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par redah75 Voir le message
    1- est ce bien utile et important cette histoire de slash a la fin des URL??
    Absolument pas. C'est toi qui vois.

    Citation Envoyé par redah75 Voir le message
    2- quand j'ai une erreur 404, c'est le message en anglais qui est affiché, comment pourrais je conserver le code de la langue?
    C'est un message à toi ou le message d'erreur par défaut d'Apache ? Le mieux c'est que tu utilises tes propres pages d'erreur (directive ErrorDocument) qui sont en fait des pages PHP qui gèrent le code de langue. L'intérêt de tes propres pages d'erreur, en dehors de l'aspect langue, est que tu peux conserver un joli affichage cohérent avec ta charte graphique.

    Citation Envoyé par redah75 Voir le message
    3- lorsque je suis sur http://www.moroccan-arts.com/uk/test-index.php et que j'enlève le '-', il me redirige vers http://www.moroccan-arts.com/test-index.php?tld=uk, je pense que ça vient de l'hébergeur, je sais qu'ils ont une sorte de script qui corrige les url, genre tu tapes inde.php, tu es redirigé vers la bonne url qui est index.php. dois je les contacter pour ce problème?
    Non, ça doit être parce que la négociation de contenu Apache est activée par défaut. Il faut que tu mettes ceci tout en haut de ton .htaccess :
    Mais attention, cela peut avoir une influence sur le comportement de ton site et tes réécritures notamment.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  14. #34
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    C'est un message à toi ou le message d'erreur par défaut d'Apache ? Le mieux c'est que tu utilises tes propres pages d'erreur (directive ErrorDocument) qui sont en fait des pages PHP qui gèrent le code de langue. L'intérêt de tes propres pages d'erreur, en dehors de l'aspect langue, est que tu peux conserver un joli affichage cohérent avec ta charte graphique.
    c'est un message a moi, et voici justement le code que je mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument 404 /error-404.html
    le problème c'est qu'il me redirige toujours vers /error-404.html (page US) quelque soit la langue. comment pourrais je récupérer le code de la langue pour afficher le message dans la langue appropriée??

  15. #35
    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
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Le mieux c'est que tu utilises tes propres pages d'erreur (directive ErrorDocument) qui sont en fait des pages PHP qui gèrent le code de langue.
    Tu dois déclarer cette page PHP dans ton ErrorDocument à la place de ta page .html, et dans cette page PHP, il faut que tu récupères la langue. Ca peut être simple comme ça peut être compliqué. Si le code de langue figure toujours dans l'URL qui figure dans la barre d'adresse du navigateur, tu dois pouvoir récupérer cette URL, donc le code de langue avec une variable de $_SERVER. Mais le problème c'est qu'il faut parser cette URL pour retrouver le code de langue. Du coup, le plus simple c'est peut-être de stocker et récupérer en session le code de langue, si tu utilises les sessions, bien sûr.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  16. #36
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Ca marche, merci beaucoup
    @ bientot

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [HIBERNATE] CLasses DAO générées avec code bizarre
    Par PamelaGeek dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/01/2006, 10h25
  2. Position avec code MonCtrl.Startposition = centerscreen ??
    Par STRUFIELD dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/12/2005, 09h25
  3. Pb avec code source "lister les images d'un dossier"
    Par Mimisator dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 15h25
  4. Comment fermer une Fenetre Modal avec Code ?
    Par Soulama dans le forum Langage
    Réponses: 19
    Dernier message: 13/07/2005, 11h17
  5. [bioinfo] pbl avec code
    Par perlaud dans le forum Bioinformatique
    Réponses: 12
    Dernier message: 19/07/2004, 17h38

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