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. #1
    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 Réécriture avec code langue en début d'URL
    Bonsoir _Mac_

    Ca n'en finit finalement jamais et je me demande si je finirai un jour ce site web

    j'ai pris 3 extensions pour le site (.fr, .co.uk, .com) le .fr et .co.uk sont destinés a mieux civler la france et le royaume uni.
    le problème est que je suis hébergé sur un serveur mutualisé et ils ne permettent qu'un certificat SSL par contrat.
    la solution qu'il me proposent est de créer 2 autres contrats et dupliquer les fichiers Web, solution que j'ai refusée!

    ou sinon passer en serveur dédier mais là ce n'est plus la meme chose au niveau prix!

    ou sinon garder UNIQUEMENT le .com puis mettre .com/fr (france) .com/uk (royaume uni)

    que pense tu de ces 2 dernières solutions? y'aurait il un impact au niveau referencement?

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    Honnêtement, je n'en ai aucune idée ! Je ne pense pas que ça change grand-chose. Faudrait faire des redirections permanentes vers les /fr et /uk, je pense. Pose la question sur le forum référencement.

    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

  3. #3
    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
    j'avais deja posé la question mais je n'ai malheureusement pas eu beaucoup de réponses : http://www.developpez.net/forums/d11...vs-extensions/

    Je pense que je vais opter pour .com/lang et du coup quel est le moyen le plus simple de récupérer la langue avec un fichier htaccess?
    un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z.{2}]+)/$ /?lang=$1 [QSA,L]
    ??

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est correct mais attention, ça ne marche que pour les URL exactes "/fr/" par exemple. Si tu as "/fr" sans / terminal ou "/fr/untrucenplus" la règle ne sera pas exécuté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

  5. #5
    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
    Ah oui c'est vrai!
    Je suis null avec les expression régulières et je n'arrive pas a les retenir, je ne sais pas comment toi tu fais!!

    Quelle sera la solution que tu proposes?
    Sachant que je viens de me rendre compte qu'il se peut quail n'y ait pas de langue. Ca Peut être uniquement site.com (international) ou site.com/uk (royaume uni)...

  6. #6
    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
    ça c'est mieux??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z.{2}])/(.*)$ /$2?lang=$1 [QSA,L]
    mais je ne suis pas sur que ça marche a tous les coups. par exemple
    site.com/fr/contact.php?par=2 sera transformé en site.com/contact.php?par=2?lang=fr
    comment a ton avis pourrais je régler ce problème??

    Merci

  7. #7
    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
    Ce sera transformé en site.com/contact.php?lang=fr&par=2. C'est quoi le problème ?

    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. #8
    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
    Umm, c'est juste que j'ai cru que ça bugera si l'URL contient déjà des paramètres... Je vais tester et te tiens au courant

    Il y a un cas a traiter sur lequel j'aimerais te demander ton avis
    Sous quelle forme me conseilles tu mettre le site par défaut:
    - site.com
    - site.com/us ??
    Histoire d'avoir toujours le code pays après le .com

    J'ai remarque que le site de Apple.com met tjrs le code pays après .com sauf pour les USA ou c'est toujours que .com

    Quelle stratégie me recommandes tu?

    Merci infiniment

  9. #9
    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
    j'ai essayé ce code mais ça ne marche pas: error 404
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z.{2}])/(.*)$ /$2?lang=$1 [QSA,L]

  10. #10
    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
    Après quelques recherches, j'ai enfin réussi a faire fonctionner la ligne RegEx que voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]
    mais j'ai 2 cas qui ne sont pas gérés
    1. Quand il n'y a pas le slash a la fin, comment pourrais toujours forcer un slash a la fin pour les dossiers?

    2. Quand c'est uniquement site.com/en/ (rien après le dossier de la langue)

    Aurais tu stp une solution?
    Merci

  11. #11
    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
    Pour la question 1 : si c'est un vrai dossier (ou répertoire), il y a de fortes chances qu'Apache rajoute tout seul le / à la fin, mais si ce n'est pas pas un vrai dossier comme le code de langue, il faut écrire une règle de redirection pour ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^[a-z]{2}$ $0/ [R,L]
    Pour le deuxième cas, c'est idem, il faut écrire une règle spécifique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]{2})/$ page_par_defaut.php?lang=$1 [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

  12. #12
    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
    Pour la question 1 : si c'est un vrai dossier (ou répertoire), il y a de fortes chances qu'Apache rajoute tout seul le / à la fin, mais si ce n'est pas pas un vrai dossier comme le code de langue, il faut écrire une règle de redirection pour ce cas :
    je viens de faire le test sur des vrai dossiers que j'ai, lorsque je ne mets pas le slash, il n'est pas automatiquement rajouté, et je pense que c'est meme mauvais d'avoir 2 URL différente avec le meme contenu:
    site.com/account et site.com/account/

    Pour le deuxième cas, c'est idem, il faut écrire une règle spécifique :
    on ne peut pas faire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]{2})/(.*) ou_rien$ /$2?lang=$1 [QSA,L]
    ??

  13. #13
    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
    Pour le 1 : tu peux essayer en mettant DirectorySlash On dans le .htaccess à la racine du site. Essaie aussi en désactivant la négociation de contenu (Options -MultiViews), je pense que ça peut jouer.

    Pour le 2 : je ne suis pas sûr que ce soit faisable car il faudrait mettre des parenthèses dans des parenthèses et je ne sais pas comment mod_rewrite se comporte dans ce cas. Le plus simple c'est de faire 2 règles.

    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. #14
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^[a-z]{2}$ $0/ [R,L]
    ca n'a pas marché, il a fallu que je rajoute un slash comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^[a-z]{2}$ /$0/ [R,L]
    est ce un pur hasard ou est ce la solution ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]{2})/$ page_par_defaut.php?lang=$1 [QSA,L]
    je ne comprends pas pourquoi mais là ça marche bien sans cette ligne de RegEx, je ne sais pour quelle raison ça ne marchais pas avant, voici ce que j'ai actuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]{2})/(.*)$ /$2?lang=$1 [QSA,L]
    j'aurais 2 dernières questions STP

    1- avec la réécriture ci dessous, ça ne marche pas lorsque je mets site.com/uk/account (sans slash), ça me redirige vers site.com/account/?lang=uk
    sais tu pourquoi?

    2- j'essaie d'avoir toujours juste .com pour l'anglais US, et .com/uk pour le Royaume uni. je ne devrais donc jamais avoir .com/us dans l'url. j'ai essaye ça mais ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^us/$ / [R,L]
    je sais que ça ne gérera pas le cas où quelqu'un met site.com/us/page.php
    aurais tu une solution?
    avant d'aller plus loin, me conseilles tu de rediriger site.com/us vers site.com ou tout simplement afficher une erreur 404 ?

    Merci mille fois

  15. #15
    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- avec la réécriture ci dessous, ça ne marche pas lorsque je mets site.com/uk/account (sans slash), ça me redirige vers site.com/account/?lang=uk
    sais tu pourquoi?
    C'est parce que le [L] ne fait pas exactement ce que tu crois qu'il fait. Il arrête la boucle de réécriture en cours mais n'arrête pas le processus de réécriture. Lorsqu'Apache a fait des réécritures, il repasse de nouveau toutes les règles pour voir si l'URL obtenue est définitive, des fois qu'il y ait d'autres règles à appliquer. La réécriture ne s'arrête réellement que lorsqu'une URL n'est plus réécrite. Dans ton cas, Apache construit une première fois l'URL que tu cherches : /account?lang=uk, mais Apache repasse ensuite toutes les règles, notamment la règle qui ajoute un / à la fin des répertoires quand il n'y en a pas, donc Apache transforme l'URL en /account/?lang=uk et redirige le navigateur.


    Citation Envoyé par redah75 Voir le message
    2- j'essaie d'avoir toujours juste .com pour l'anglais US, et .com/uk pour le Royaume uni. je ne devrais donc jamais avoir .com/us dans l'url. j'ai essaye ça mais ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^us/$ / [R,L]
    je sais que ça ne gérera pas le cas où quelqu'un met site.com/us/page.php
    aurais tu une solution?
    Ca ne marche pas signifie quoi exactement ? Dans la règle que tu donnes il faut que l'URL finisse par un / : http://site.com/us/.

    Citation Envoyé par redah75 Voir le message
    avant d'aller plus loin, me conseilles tu de rediriger site.com/us vers site.com ou tout simplement afficher une erreur 404 ?
    Clairement la redirection.

    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. #16
    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 parce que le [L] ne fait pas exactement ce que tu crois qu'il fait. Il arrête la boucle de réécriture en cours mais n'arrête pas le processus de réécriture. Lorsqu'Apache a fait des réécritures, il repasse de nouveau toutes les règles pour voir si l'URL obtenue est définitive, des fois qu'il y ait d'autres règles à appliquer. La réécriture ne s'arrête réellement que lorsqu'une URL n'est plus réécrite. Dans ton cas, Apache construit une première fois l'URL que tu cherches : /account?lang=uk, mais Apache repasse ensuite toutes les règles, notamment la règle qui ajoute un / à la fin des répertoires quand il n'y en a pas, donc Apache transforme l'URL en /account/?lang=uk et redirige le navigateur.
    Merci pour l'explication détaillée. mais je ne vois par contre toujours pas comment palier a ce problème quelle modification porter sur la ligne RegEx??

    Ca ne marche pas signifie quoi exactement ? Dans la règle que tu donnes il faut que l'URL finisse par un / : http://site.com/us/
    meme avec un slash a la fin, ça ne change rien, si je tape site.com/us/ ou site.com/us/page.php, rien ne se passe, aucune redirection!

    Bonne soirée

  17. #17
    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
    Ben je ne vois pas comment on peut corriger le problème si ce n'est ne plus forcer l'ajout d'un / à la fin pour les répertoires. Car en effet, Apache ne sait pas faire la différence entre un répertoire qui n'existe pas et un fichier qui n'existe pas non plus

    Pour le reste, peux-tu donner le .htaccess complet ? Il se peut qu'il y ait un "conflit" avec une autre règle.

    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

  18. #18
    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 je ne vois pas comment on peut corriger le problème si ce n'est ne plus forcer l'ajout d'un / à la fin pour les répertoires. Car en effet, Apache ne sait pas faire la différence entre un répertoire qui n'existe pas et un fichier qui n'existe pas non plus
    D'accord, et comment forcer un slash a la fin pour les répertoires??
    j'avais trouvé ce code mais il ne fonctionne pas très bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .*[^/]$ /$0/ [L,R=301]
    Pour le reste, peux-tu donner le .htaccess complet ? Il se peut qu'il y ait un "conflit" avec une autre règle.
    le voici:
    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
    ## activate rewriting rules
    RewriteEngine on
     
    ## 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 ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
    RewriteRule ^[a-z]{2}$ /$0/ [R,L]
    #RewriteRule ^us/$ / [R,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]
    les premières règles du .co.uk vers le .com/uk/ n'ont pas encore été testées, penses tu qu'elles sont correctes??

  19. #19
    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
    Comme je te disais, la redirection pour ajouter un / à la fin est problématique pour les dossiers qui ne sont pas de vrais dossiers. Donc Apache ne qu'appliquer la règle systématiquement ou jamais. Pour les vrais dossiers, il faut compléter la règle avec un RewriteCond -d :
    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]
    Il faut mettre la redirection pour /us/ en premier, avant celle en ^([a-z]{2})/(.*)$ car cette secondes matche la première URL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteRule ^us/$ / [R,L]
    RewriteRule ^([a-z]{2})/(.*)$ /$2?tld=$1 [QSA,L]
    RewriteRule ^[a-z]{2}$ /$0/ [R,L]
    La règle en .co.uk semble correcte.

    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

  20. #20
    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 oui j'avais bien compris qu'apache a du mal a différencier les dossiers 'vrais' des dossiers 'virtuels'
    Mais la ce qui est bizarre c'est qu'il s'agit d'un vrai dossier (/account/)
    J'ai mis le code que tu m'as file mais ça ne marche toujours pas lorsque je saisis site.com/uk/account (sans slash) il me redirige vers site.com/account?lang=uk

    Concernant la redirection de /us, ça bien marche merci. Mais pourquoi pour cette ligne on met [R,L] et pour la dernière ligne [QSA,L] ??

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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