Rewrite url en lettres

  • Auteur de la discussion Auteur de la discussion Oka
  • Date de début Date de début
Nouveau WRInaute
Bonjour à tous,

Je sèche sur une réécriture d'url.
J'utilise le CMS Spip et souhaiterai générer dynamiquement des listings de pages :
j'ai ma page ecole.html qui doit générer sous une boucle une liste d'écoles avec le nom de la ville ===> ecole-toulouse.html ecole-limoges.html etc... , j'en ai 90 à faire.
Dans ma table j'ai mon id_ville et le champ "meta" avec le nom des villes en texte brut.

Je n'arrive pas à afficher mes pages d'écoles avec le htaccess, j'ai essayé ceci mais à chaque fois c'est une page blank :
Code:
RewriteRule ^ecole-([^/.]+) (\.html)?$   spip.php?page=ecole&meta=$1 [QSA,L]
RewriteRule ^ecole-([^/.]+) (\.html)?$   spip.php?page=ecole&id_ville=$2&meta=$1 [QSA,L]
RewriteRule ^ecole-(-[a-z]*) (\.html)?$  spip.php?page=ecole&meta=$1 [QSA,L]

Je ne comprend pas comment l'on peut générer des réécritures avec des lettres ... pour les chiffres il n'y a pas de soucis ([0-9]+) mais pour l'alphabet je sèche ...
si quelqu'un peut éclairer ma lanterne ?

merci d'avance :)
 
WRInaute passionné
Et comme ça ?
Code:
RewriteRule ^ecole-([^/]+).html$   /spip.php?page=ecole&meta=$1 [QSA,L]
 
Nouveau WRInaute
Bonjour et merci de la réponse :)

ça ne fonctionne pas, mais maintenant c'est une erreur 404 et plus blank... j'ai essayé avec ceci :
- RewriteRule ^ecole-([^/]+).html$ /spip.php?page=ecole&meta=$1 [QSA,L]
- RewriteRule ^ecole-([^/]+).html?$ /spip.php?page=ecole&meta=$1 [QSA,L]
- RewriteRule ^ecole-([^/]+).html?$ spip.php?page=ecole&meta=$1 [QSA,L]

comme cela ne fonctionnait pas, j'ai aussi essayé de mettre dans la boucle sur ma page le champ "meta" en vain ... toujours erreur 404.
 
WRInaute impliqué
générer dynamiquement des listings de pages :
j'ai ma page ecole.html qui doit générer sous une boucle une liste d'écoles

Ça veut dire quoi générer un lisiting de page ou une boucle ?

Je ne comprend pas comment l'on peut générer des réécritures avec des lettres ... pour les chiffres il n'y a pas de soucis ([0-9]+) mais pour l'alphabet je sèche ...

C'est pas bien différent : avec la syntaxes des expression régulières, on indique entre crochets les caractères ou plages de caractères recherchés : [0123456789] matchera avec tous les caractères qui sont soit un 0, soit un 1, soit un 2, etc., on peut également l'écrire sous forme d'intervalle [0-9] (tous les caractères dont le code de codage est entre celui du 0 et celui du 9), ou encore (mais ça dépend un peu des syntaxes) [\d].

Pour les lettres minuscules et hors diacritiques on utilisera [a-z], minuscules et majuscules [a-zA-Z]. Pour les diacritiques, c'est plus chiant, et je préfère utiliser une approche du style de celle suggérée par @rick38, c'est-à-dire en excluant le ou les caractères dont on ne veut pas.

Je n'arrive pas à afficher mes pages d'écoles avec le htaccess, j'ai essayé ceci mais à chaque fois c'est une page blank :
Code:
RewriteRule ^ecole-(-[a-z]*) (\.html)?$  spip.php?page=ecole&meta=$1 [QSA,L]

Et c'est normal : cette dernière expression comprend un tiret dans la parenthèse, ce qui fait qu'elle correspondrait avec une chaîne du style : ecole--lyon.html (deux tirets à la suite).

En parlant de tirets, penser à la façon dont les noms de ville sont gérés. Par exemple la page de Mont-de-Marsan est-elle ecole-mondemarsan (ça passe avec la regex [a-z]) ou ecole-mont-de-marsan (auquel cas il faut inclure les tirets dans les caractères : [a-z-], certains préfèreront échapper explicitement le tiret [a-z\-]).
 
Dernière édition:
Nouveau WRInaute
Bonsoir,

merci pour ces explications et réponses :)

Pour ma boucle c'est comme une boucle "for" / "while" => tant qu'il y a des résultats via ma bdd, alors ça génère ma page : ici seul les noms des villes changent dans le contenu éditorial
J'ai dans ma bdd, à peu près 90 villes qui doivent être générées sous cette page ecole-"nomdelaville".html

hors mon cms fait appel à ces villes via leur id et non leur nom de ville
dans ma table "ecoles" j'ai le champ "meta" qui recupère chaque nom de ville en texte brut (sans accent - majuscules - caractères)

Lorsque je réécris via htaccess cette page, je n'arrive pas à les afficher, d'où mes précédentes réponses.
Comme dit plus haut, générer les pages via leur id c'est OK de mon côté :
RewriteRule ^ecole-([0-9]+) (\.html)?$ spip.php?page=ecole&id_ville=$1 [QSA,L]
les pages sont affichées => tous mes établissements

MAIIIIS dès que je souhaite passer à un affichage en lettre : ecole-([a-z]+) ou autres syntaxes similaires, ça ne fonctionne pas.
 
WRInaute passionné
Mais quand tu essaies l'url direct du genre .../spip.php?page=ecole&meta=ecole-toulouse elle marche au moins ?
 
WRInaute impliqué
La réécriture d'URL est juste un moyen de "réinterpréter" l'URL fournie par l'internaute : l'internaute souhaite accéder à l'URL A, la réécriture dit au serveur de l'interpréter comme s'il s'agissait de l'URL B.

Un exemple classique est de transformer les éléments de la requête ou d'y ajouter des mots clés. Ainsi alors que le serveur a besoin d'une URL du type example.com/forum.php?rubrique=13245&sujet=4723612, on pourra souhaiter que l'URL soit plutôt example.com/forum/technique_13245/la-reecriture-d-url_4723612. La réécriture consistera à "réinterpréter" la seconde l'URL lors de sa consultation comme s'il s'agissait de la première. C'est ici l'exemple classique, où le serveur accède aux éléments par leur id (c'est souvent ce qu'il a de plus simple, stable et non-ambigu), mais on pourrait utiliser autre chose à la place d'un id numérique, à la condition que le serveur sache l'interpréter.

Pour en revenir à ton cas, il faut donc que le serveur soit capable de retrouver une page, non pas depuis son id, mais depuis le nom de la ville qui, nous dis-tu, est dans le champ meta.

Je ne connais pas particulièrement SPIP, mais je ne suis pas certain qu'ajouter "?meta=x" dans l'URL suffise pour que le serveur comprenne que tu veux l'entrée dont la valeur meta est égale à x.

D'où la question de @rick38, est-ce que la page est atteignable de cette façon ? Car il est bien possible que ce ne soit pas du tout un problème de réécriture d'URL en fait.
 
Discussions similaires
Haut