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 ] xyz.com/fr/efg.php <=> xyz.com/efg.php?l=fr


Sujet :

Apache

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut [ url rewriting ] xyz.com/fr/efg.php <=> xyz.com/efg.php?l=fr
    Bonjour

    Je viens de decouvrir / realiser le potentiel et l'interet de l'url rewriting en lisant un bouquin. J'ai suivi les 4 premiers tuto proposés sur google (tous basés sur l'exemple proposé par apache). J'ai essayé et ca marche aussi sur mon serveur. Au moment d'appliquer ca à mes besoins, forcemment, ca coince.

    J'ai un site multilangue en php. J'utilise un script qui va reconnaitre la langue du navigateur et charger le bon dictionnaire. Si le choix n'est pas evident ou si l'on souhaite hardcoder le choix de la langue (i.e. bouton "drapeaux") j'ai un paramètre qui se balade: www.monsite.com/mapage.php?lang=fr

    Je voudrai donner le rendu suivant, mais je coince: www.monsite.com/fr/mapage.php

    Je n'arrive qu'a creer des mapage-fr.php. C'est déjà un debut mais bon...

    Quelqu'un pourrait me donner une direction / tuto pour résoudre mon léger probleme ?

    Merci d'avance et bonne fêtes
    Greg

  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
    Tu as fait des essais ? On peut voir ce que ça donne ? Logiquement, faut travailler avec le .htaccess se trouvant à la racine de ton site.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut
    Hello

    Déjà merci d'avoir sauté sur mon message. D'après ce que j'avais lu un peu partout, je pensais pouvoir faire des tests avec un htaccess dans un repertoire avant de repliquer ca partout sur le site. Mon htaccess à la racine ne contient pas de rewrite.

    Le fichier htaccess ci-dessous est donc placé dans le repertoire /test/. J'ai un peu bidouillé depui mon premier message et maintenant j'en suis là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #--------------------------------------------------
    # Répertoire : /test/
    #--------------------------------------------------
     
    # Le serveur doit suivre les liens symboliques :
    Options +FollowSymlinks
     
    # Activation du module de réécriture d'URL :
    RewriteEngine on
     
     
    RewriteRule ^/en/$  ?lang=en [L]
    Avec ca, je m'attendrai à ce que toutes mes urls xyz.com/en/patate.php chargent xyz.com/patate.php?lang=en. J'en suis loin ?

  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
    Citation Envoyé par toutgreg Voir le message
    Déjà merci d'avoir sauté sur mon message. D'après ce que j'avais lu un peu partout, je pensais pouvoir faire des tests avec un htaccess dans un repertoire avant de repliquer ca partout sur le site.
    A priori, tu ne devrais pas avoir besoin de répliquer avec le seul .htaccess à la racine du site car il sera prus en compte pour toutes les URL du site.

    Citation Envoyé par toutgreg Voir le message
    Avec ca, je m'attendrai à ce que toutes mes urls xyz.com/en/patate.php chargent xyz.com/patate.php?lang=en. J'en suis loin ?
    Encore un peu Ton pattern est trop strict : il faut que ce soit /en/ strictement, sans rien derrière. Donc /en/patate.php n'active pas la règle. Il faut donc l'élargir en indiquant uniquement ce qui t'intéresse : que l'URL commence par /en/ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^/en/(.*)$ $1?lang=en [QSA,L]
    Je rajoute un groupe pour récupérer tout ce qui suit le /en/ et donc récupérer patate.php. J'ajoute également QSA pour que les autres paramètres d'URL passés soient conservés.

    Après, cette règle peut ne pas marcher Si c'est le cas, retire le premier / devant "en" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^en/(.*)$ $1?lang=en [QSA,L]
    C'est le cas sur mon PC avec Apache 1.3 (j'ai testé dans un répertoire "rub" et l'URL http://localhost/rub/en/patate.php?hoho=hehe.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut
    Aie, ça ne marche pas de mon coté. J'ai recrée un site sur la racine pour ne pas travailler sur un site déjà existant. Je cherche et je reviens vers toi quand j'ai trouvé ma boulette !

    Merci de ton aide

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut
    Pour commencer, bonne année

    Alors donc depuis la dernière fois, j'ai recrée un set de fichiers à la racine d'un compte. J'ai donc un .htaccess vierge et mon fichier patate.php.

    Fichier htaccess
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Options +FollowSymlinks
    RewriteEngine on
     
    RewriteRule ^en/(.*)$ $1?lang=en [QSA,L]

    fichier patate.php
    la variable est : <?php echo ($_GET['lang']);?>
    Lorsque j'essai d'acceder à www.mon-site.eu/en/patate.php, j'ai une erreur 404. Evidemment, ca marche si je vais directement sur www.mon-site.eu/patate.php?lang=en.

    J'ai essayé d'être plus restrictif, pensant rendre les choses plus simple... mais ca n'a pas marché non plus:

    RewriteRule ^http://www\.mon-site\.eu/en/(.*)$ http://www\.mon-site\.eu/$1?lang=en [QSA,L]
    D'apres toi le .htaccess est bon ?

  7. #7
    Membre éclairé Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Par défaut
    Bonjour,
    petite remarque: Pas besoin d'échapper la 2eme chaine (celle qui contient le remplaçement $1 ) puisque ce n'est pas une expression régulière.
    Citation Envoyé par toutgreg Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^http://www\.mon-site\.eu/en/(.*)$ http://www\.mon-site\.eu/$1?lang=en [QSA,L]
    Sinon, je ne suis pas un crack en url rewriting, mais aurait-tu éssayé en spécifiant ?

  8. #8
    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
    La règle que j'ai donnée doit fonctionner puisqu'elle fonctionne chez moi

    Ce qu'il se passe, c'est qu'il y a peut-être un conflit avec un autre module. Essaie en ajoutant l'option -MultiViews :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Options +FollowSymlinks -MultiViews
    RewriteEngine on
     
    RewriteRule ^en/(.*)$ $1?lang=en [QSA,L]
    Attention : s'il existe un répertoire "en", c'est possible qu'il y ait aussi conflit.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut
    Ca marche !

    Outre mon probleme de syntaxe (merci _Mac_), la fonction "RewriteBase /" semble avoir activé l'url rewriting sur mon serveur (merci knoodrake). Il y avait forcement un problème de ce genre...

    Merci pour votre aide et bonne rentrée
    Greg

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

Discussions similaires

  1. [URL rewriting] domain.com vers domain.com/pages/index.php
    Par MatthieuFourcade dans le forum Apache
    Réponses: 3
    Dernier message: 01/04/2010, 14h28
  2. Concepteur web : PHP/MySQL, Url Rewriting, Web designer
    Par nnet_mathieu dans le forum Demandes
    Réponses: 0
    Dernier message: 02/08/2007, 19h12
  3. URL Rewriting et parametres PHP
    Par mimiz dans le forum Apache
    Réponses: 1
    Dernier message: 31/10/2006, 14h34
  4. URL Rewrite : par PHP ou par mod_rewrite ?
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 29/06/2006, 11h28
  5. URL Rewriting ou PHP ?
    Par V_R46 dans le forum Langage
    Réponses: 5
    Dernier message: 22/05/2006, 13h24

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