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 :

(.*) dans une réécriture d'url


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut (.*) dans une réécriture d'url
    Bonjour,

    Mon site comporte un petit moteur de recherche tout simple, et au lieu d'avoir une URL de recherche du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://www.monsite.com/index.php?page=recherche&mot=Tronconneuse
    j'aimerais avoir une URL du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://www.monsite.com/Tronconneuse
    Jusque là, pas trop de soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule ^([a-zA-Z0-9]+)$ /index.php?page=recherche&mot=$1 [L]
    Cependant, un problème se pose si l'utilisateur tape "Café", ou "Alcool à brûler" (accents et espaces). Avec la règle ci-dessus, j'obtiens une 404 (normal, je spécifie un range d'alphanumériques).

    Je suis donc tombé sur ^(.*)$, qui me donne une erreur 500 permanente...
    Comment cela se fait-il ? Une idée pour corriger mon problème?

    Merci à tous et bon dimanche

  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
    avec ^(.*)$, la réécriture part en boucle infinie. Pour l'explication, voir ce post-ci et ce post-là : le [L] ne suffit pas, car la réécriture s'arrête lorsqu'on tombe sur une URL qui ne change pas, le but étant de satisfaire toutes les règles.

    Pour ton cas, il y a peut-être un moyen simple de t'en sortir : limiter ta règles lorsqu'on demande une page qui ne correspond pas à un fichier ou un répertoire existant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?page=recherche&mot=$1 [L]
    En procédant ainsi, l'URL issue de la première réécriture (/index.php?page=recherche...) ne sera pas réécrite car elle pointe sur index.php qui existe, et donc on sort de la boucle infinie.

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut
    Je suis d'accord avec toi, mais j'ai toujours un petit problème.
    En fait, si j'utilise (.*), même avec la RewriteCond que tu m'as donnée, mon site part toujours en panade (les règles ne fonctionnent qu'à peine, et mon server passe son temps à se moquer de moi en redirigeant /Tronconneuse vers /Tronconneuse/index.php, qui me donne une autre 404 (?)).

    Plus simplement, j'ai besoin de pouvoir passer des é, è, à et des espaces dans mon modèle htaccess (d'où l'idée du .*, qui match pour tout caractère).

    Est-ce donc possible, sans avoir recours à (.*), d'utiliser une regexp du style : ([a-zA-Z0-9éèà ]) ? (c'est surement faux mais c'est pour donner une image de ce dont j'ai besoin).

    Merci beaucoup

  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
    Et bien il faut tester

    Je n'ai jamais trop aimé les accents et je ne sais pas trop ce que ça peut donner dans les RewriteXxx (mes derniers essais sur le sujet remontent à plusieurs mois).

    Il y a d'autres règles dans ton .htaccess ? Logiquement, tu ne devrais pas être redirigé sur /Tronconneuse/index.php.

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 25
    Par défaut
    J'ai trouvé la solution à mon problème complètement par hasard... et donc je viens aux informations pour comprendre l'histoire ^^

    En fait, en utilisant .+ au lieu de .*, j'obtiens exactement le résultat dont j'avais besoin... tout passe par un .+ (tout_ce que_jé veû par exemple).
    Après, parfois j'étais redirigé vers /index.php, et puisque j'avais une 404, j'ai fait une seconde règle identique à la première, avec /index.php à la fin... et ça marche.

    Quelle est la différence entre .* et .+ ? Une idée pour ce /index.php ? (Je pense que ça se produit avec la réécriture d'une URL en /quelque/chose/qui/se/termine/par/un/slash/comme/si/c'était/un/dossier/dont/on/ne/spécifie/pas/le/fichier/pour/afficher/le/fichier/par/défaut/ = index.php (avec un slash à la fin quoi )

    Merci de ton aide en tous cas

  6. #6
    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
    .+ c'est "au moins un caractère", alors que .* c'est "0 ou plus". Donc avec une URL correspondant à un répertoire (.../), un RewriteRule qui travaille sur ce qui se trouve après le / fera matcher .* mais pas .+.

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

Discussions similaires

  1. RegEx dans la réécriture d'URL
    Par BenFett dans le forum Apache
    Réponses: 7
    Dernier message: 29/10/2008, 10h00
  2. Afficher une image sans URL dans un forum
    Par Vanesse dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 01/03/2006, 17h55
  3. [VB.NET] Ajouter une cible dans une URL
    Par guimartbis dans le forum ASP.NET
    Réponses: 3
    Dernier message: 04/05/2005, 14h17
  4. Création affectation de parmètre dans une url
    Par bumbo500 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/11/2004, 16h39
  5. [ Struts ] recuperer une valeur dans une url?
    Par njac dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/06/2004, 14h24

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