Bonjour,

J'ai créer un site où j'utilise la réecriture d'url seulement voilà pour mon système de recherche il faut que je passe en paramètre les filtres et j'ai donc une URL comme ceci https://monsite.fr/search/votre+recherche+tapée#search=filter:Fantastique|books|all|id et voici mon .htaccess :

RewriteEngine on
RewriteRule ^search/([a-zA-Z0-9]+)#search=filter:([a-zA-Z]+)|([a-zA-Z]+)|([a-zA-Z]+)|([a-zA-Z]+)                    search.php?q=$1&c=$2&type=$3&state=$4&oder_by=$5

Lorsque que je suis sur la page de recherche, je fait un print_r($_GET) et il me donne pour type=search et rien pour les autres. Donc je ne comprend pas bien d'où sort se “search” et comment faire pour conserver la forme de mon url en envoyant correctement les paramètres.

Merci d'avance !

3 réponses


Salut,

attention,
il me semble que la principale raison de la "réécriture d'url" est d'avoir une jolie URL lisible facilement par les humains.
les caractères "#", "=", et ":" ne devrait pas être là.
Je crois que les seuls autorisés sont les caractères (je ne suis pas sûr) :

  • alpha-numérique
  • "/"
  • "-"

Je me demande si un de ces caractères pourrait gêner. Essaie de les enlever pour voir ?

Après,
je vois que pour tes 4 filtres : "c", "type", "state", et "order_by",
tu as écris : ([a-zA-Z]+)|([a-zA-Z]+)|([a-zA-Z]+)|([a-zA-Z]+)
Mais ça ne va pas,
le symbole "|" (barre verticale) signifie "ou"
Du coup si on traduit en "phrase", tu as écris :
LE filtre doit être SOIT :

  • une chaine alphabétique (minuscule ou majuscule) d'au moins une lettre OU
  • une chaine alphabétique (minuscule ou majuscule) d'au moins une lettre OU
  • une chaine alphabétique (minuscule ou majuscule) d'au moins une lettre OU
  • une chaine alphabétique (minuscule ou majuscule) d'au moins une lettre

(on répète la même chose 4 fois, ce qui ne va pas bien sur)

T'es 4 filtres seront TOUJOURS présent ou l'utilisateur peut choisir d'en utiliser moins ?

Montre nous aussi le lien sur lequel tu clic (je voudrais voir le "href")

Non les filtres y seront toujours puisque via la page de recherche l'utilisateur pourra les changer
Voilà mon liens

<a href="http://monsite.fr/search/all#search=filter:Fantastique|books|all|id" class="books-category">Fantastique</a>

Et j'ai essayer en mettant des antislashes

RewriteRule ^search/([a-zA-Z0-9]+)#search=filter:([a-zA-Z]+)\|([a-zA-Z]+)\|([a-zA-Z]+)\|([a-zA-Z]+)   

Du coup tu gardes les caractères #, =, :, et | dans l'URL alors ?
Il me semble que c'est une chose que Google sanctionne.

Mais attends,
pourquoi tes filtres ne sont pas gérés par un form, avec des radio, select, ou checkbox ?
Là c'est étrange,
le lien "fantastique" est définit "en dur" avec la valeur "fantastique" pour le 1er filtre (ça OK),
mais AUSSI avec les valeurs "books", "all", et "id" pour les 3 autres filtres ? (ça me parait impossible)
Je ne vois pas comment ça peut fonctionner.

À la limite, si tu veux gérer les filtres par des liens,
il faudrait que le lien "fantastique" ne définisse QUE la valeur du 1er filtre, et pas AUSSI celle des 3 autres filtres.
Et pareil pour les autres liens (filtres), chacun ne devrait définir que la valeur du filtre qui correspond.
Et du coup, quand tu clic sur un lien, tu ne changes qu'une valeur (du filtre correspondant), et tu récupères toutes les autres (celles des autres filtres) dans $_SESSION.
Il faudra donc aussi que, quand tu clic sur un lien (filtre), enregistrer la nouvelle valeur choisie (du filtre correspondant) dans $_SESSION.
Chacun de ces liens ramenant toujours sur la même page (mais contenant une valeur différente qu'on passe en GET)