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

Langage PHP Discussion :

URL rewriting et point d'interrogation [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut URL rewriting et point d'interrogation
    Bonjours à tous,

    Voilà alors j'ai un .htaccess qui contient ces lignes :

    Options +FollowSymlinks
    RewriteEngine on
    RewriteRule ^monsite-search-(.*)\.html$ monsite.php?search=$1[L]

    (la valeur de la variable 'search' est tapée par un utilisateur via un formulaire)

    Si dans le formulaire je tape : bidul .
    alors il n'y a aucun soucis, l'url de retour est : monsite-search-bidul.html .

    Mais lorsque je tape un point d'interrogation, j'obtiens le message d'erreur :

    " Not Found
    The requested URL /monsite-search- was not found on this server."

    Alors que puis-je faire pour que les points d'interrogations soit correctement pris en compte en tant que text, et non en tant qu'instruction pour .htaccess.
    (A ce propos, il me semblait que le point dans : (.*), devait inclure n'importe quel caractere, donc le point d'interrogation )

    Merci d'avance pour vos réponses.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le point d'interrogation n'etant pas autorisé dans les noms de fichier windows, et etant un caractere spécial dans une URL, je ne vois pas bien ce que tu veux obtenir.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    je vais plus détailler.

    j'ai un formulaire pour faire une recherche :

    <form action="recherche.php" method="post">
    <input type="text" name="search" />
    </form>

    Je veux que l'url soit la suivante après qu'un utilisateur ait fait une recherche :

    http://www.monsite.com/recherche-mots+tappés+par+lutilisateur.html

    Pour cela, au tout début de la page recherche.php j'écris le code suivant:

    <?php
    if (isset($_POST['search']))
    {
    $blop = trim($_POST['search']); //je récupère ce qui a été tappé dans $blop

    $blip = str_replace(' ', '+', $blop); //je rempace les espace entre les mots par des +

    header('Location: recherche-' . $blip . '.html'); //je fais la redirection vers une url propre et contenant les mots tappés
    }
    ?>


    Maintenant le code présent dans le .htaccess :

    Options +FollowSymlinks
    RewriteEngine on

    RewriteRule ^recherche-(.*)\.html$ /recherche.php?search=$1 [L]

    Voilà. Ceci marche très bien, les mots sont correctement séparé par des + , et tout ce passe bien...
    Sauf quand je tape un point d'interrogation dans la recherche.
    En effet, en tapant uniquement un '?' dans mon formulaire de recherche, l'url lisible dans la barre d'adresse du navigateur est bien : http://www.monsite.com/recherche-?.html.
    Cependant, une erreur 404 s'affiche en me disant que le fichier http://www.monsite.com/recherche- n'a pas été trouvé.

    Voilà, je souhaiterai tout simplement pouvoir rentrer n'importe quel caractère dans le formulaire.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Mais quel serait l'interet d'accepter le point d'interrogation etant donné que ce cas ne peut pas etre traité ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    eh bien en fait, le formulaire de recherche est là pour trouver des articles que j'aurai rédigés.

    si dans le titre de mon article j'ai un point d'interrogation, et que quelqu'un fait fait un copier coller de ce titre pour le rentrer dans la barre de recherche, ça ne marchera pas.

    et j'aimerai que ça marche.


    Dois-je faire en sorte que si un point d'interrogation est tapé dans la barre de recherche, ça le supprime, donc , que ça fasse la recherche avec tous les mots tapés par l'utilisateur, sauf le '?' ?

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Moi je passerais tout ça dans une moulinette urlencode/urldecode

    Pour une piste, regardes l'url générée par une recherche de "hello ?" dans google...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Au final, je remplace tous les "?" par "%3F" :

    $blip = str_replace('?', '%3F', $blip);

    Donc la solution serait de remplacer tous les caractères spéciaux susceptibles de faire planter par d'autres caractères qui ne font pas planter et dont je suis certain qu'ils ne seront jamais présents dans mes titres.

    Ainsi, vu que mon script de recherche fait en sorte de sortir les titres qui ont au moins un des mots-clés tapés dans la barre de recherche, j'y trouverai mon compte.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/11/2010, 23h42
  2. Réponses: 6
    Dernier message: 19/01/2009, 12h47
  3. Réponses: 10
    Dernier message: 28/02/2008, 16h04
  4. [Débutant]infos ds session sans cookie ? url rewriting ?
    Par Satanas_et_diabolo dans le forum ASP
    Réponses: 8
    Dernier message: 10/10/2006, 17h13
  5. Url Rewriting / htaccess
    Par bisi dans le forum Apache
    Réponses: 4
    Dernier message: 25/07/2004, 22h12

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