8791 sujets

Développement web côté serveur, CMS

Bonjour à tout le monde,

A l'intérieur d'un répertoire, j'ai une page source.php qui prend en paramètre une chaîne de caractères (uniquement des minuscules et/ou des chiffres et/ou des tirets haut). J'ai donc pondu, malgré mon manque de compétences dans le domaine, une règle comme ceci :
RewriteRule ^([a-z0-9-]+)\.php$ /dossier/source.php?param=$1 [L]


Si j'enlève le tiret dans cette règle, tout se passe bien. Si ce n'est, évidemment, que je ne peux pas utiliser le tiret dans la chaîne de caractères passée en paramètres.

Si je mets ce tiret dans cette règle : erreur 500. Que le tiret soit échappé ou non, au début ou à la fin.
Si je remplace ce tiret par un underscore, aucun souci, je peux passer une chaîne genre "ma123_chaine", ça marche bien.
Idem si je remplace ce tiret par "\\" (sans les guillemets bien sûr). Je peux glisser un antislash au milieu de ma chaîne, pas de soucis.

Alors en un mot comme en mille, j'y pige vraiment rien. Smiley ohwell

Au cours de mes très nombreuses tentatives, j'ai obtenu d'autres genres de résultats pour le moins étranges (à mon humble niveau) :

RewriteRule ^([-abcdefghijklmnopqrstvwxyz0123456789]+)\.php$ /dossier/source.php?param=$1 [L]
RewriteRule ^([-uabcdefghijklmnopqrsvwxyz0123456789]+)\.php$ /dossier/source.php?param=$1 [L]


- Sur la première règle, je peux passer quelque chose comme "123-foo.php". Mais je ne peux pas utiliser la lettre "u", qui n'est pas présente, comme vous l'aurez remarqué avec vos yeux de lynx.

- Sur la seconde règle, je peux enfin passer mon "u", et passer genre "123-youpi.php". Mais, toujours avec votre vue supersonique, vous aurez vu que j'aurais pour cela dû sacrifier la lettre "t".

Dans ces deux cas, ce que je constate, c'est que le caractère dont je dois me passer se situe toujours au même endroit (allez savoir pourquoi).

Vous me direz : bin rajoute la, ta lettre manquante bougre d'âne !
En tout cas, c'est ce que moi je me suis dit. Même ma femme me l'a dit.
Mais quand je le fais : erreur 500.

Pitié, dites-moi que vous avez des idées Smiley bawling Smiley bawling Smiley bawling
Modifié par Drakarys (13 Apr 2014 - 10:13)
Bonjour tout le monde,

Je reviens vers vous en postant un nouveau message plutôt qu'en éditant le précédent, car je pense que ce que j'ai à ajouter est sans doute important.

En fait c'est simple, si j'écris la règle de cette façon :
RewriteRule ^(.*)\.php$ /dossier/source.php?c=$1 [L]

J'obtiens une erreur 500 pour tout le répertoire "/dossier/".
(Alors que je souhaiterais accéder à /dossier/cequejeveux.php)

Par contre, si je m'amuse à faire ceci :
RewriteRule ^salut-coucou-(.*)\.php$ /dossier/source.php?c=$1 [L]

Et que je tente d'accéder à /dossier/salut-coucou-toutcequejeveux.php
Là, aucun problème, ça marche du feu de dieu.

Alors je me dis que ça peut être :
- ce qu'on appelle "une erreur de syntaxe à la con",
- un conflit avec d'autres règles (mais cette nuit j'ai essayé avec un fichier .htaccess refait à neuf, et sauf erreur de ma part, même résultat).
- Un souci chez l'hébergeur ? (OVH - mutualisé).

Quelqu'un aurait une idée svp ?
Tu n'as pas un moyen d'aller consulter les logs ? OU bien tu l'as déjà fait et ça te dit juste laconiquement syntax error ?
ET si tu échappes le tiret ça donne quoi ?
En échappant le tiret comme ça :
([a-z0-9\-])

A la fin comme ici, ou au début peu importe : erreur 500.

Côté logs, je suis pas expert non plus, mais j'ai trouvé ça qui correspond à mes tentatives
a écrit :
"GET /dossier/ HTTP/1.1" 500 347 "-"

Ce qui personnellement ne m'aide pas du tout.

Merci pour ta réponse en tous cas QuentinC.