Galdon Posté 12 Février 2009 Posté 12 Février 2009 Bonjour, j'ai une RewriteRule qui fonctionne impec sur mon hébergement (UNIX), alors que ça me donne un Not Found en local sous windows. Voici la règle en question : RewriteRule ^news/([0-9]+)-([a-zA-Z0-9\-\.]+).html$ /index.php?page=news.php&id_news=$1&permalien=$2 [L] Et l'URL : http://localhost/news/28-after-effects-cs4.html Ce sont les dash (-) qui posent problème, parce que quand je demande /news/28-after.html par exemple, j'ai pas d'erreur Apache. Alors, c'est quoi ce bin's ? Merci de votre aide.
jcaron Posté 13 Février 2009 Posté 13 Février 2009 Je ne sais pas quelle implémentation de regex Apache utilise (il y en a une dans le source, mais peut-être qu'il utilise celle du système quand il y en a une? Flemme de vérifier), mais dans certaines, pour inclure un "-" dans une liste entre crochets, il faut le mettre en premier (non escapé). Dans d'autres tu peux le mettre en premier ou en dernier au choix, pas escapé non plus. Donc [-A-Z], pas [A-Z-] ou [A-Z\-]. Alternativement tu peux utiliser des notations type (a| donc par exemple ([A-Z]|-) mais ça peut poser des problèmes si tu dois récupérer des paramètres (dans les implémentations un peu sympa des regex tu peux utiliser (?:texte) pour que les () ne soient pas capturantes, mais je ne pense pas que ce soit le cas dans celles d'Apache. Jacques.
Dan Posté 13 Février 2009 Posté 13 Février 2009 Ton hébergement doit être chez OVH Dans ta règle, supprime le / devant index.php du second argument ! Dan
Galdon Posté 13 Février 2009 Auteur Posté 13 Février 2009 Oui je suis chez OVH, mais de toute façon, chez OVH cette règle fonctionne nickel, c'est en local que ça posait problème. Parce que j'ai résolu le problème en ajoutant un dash à la fin de la seconde classe : ([a-zA-Z0-9\-\.-]+). Et maintenant ça fonctionne ! Je n'aime pas trop faire des trucs que je ne comprends pas, même si ça marche. Donc à quoi il sert ce tiret ?
Dan Posté 13 Février 2009 Posté 13 Février 2009 Le / devant le second argument n'est nécessaire que chez OVH parce qu'ils ont leur propre module de réécriture. C'est pour cela que je te disais de l'enlever EN LOCAL ! Dan
jcaron Posté 13 Février 2009 Posté 13 Février 2009 A bracket expression is a list of characters enclosed in `[]'. It nor- mally matches any single character from the list (but see below). If the list begins with `^', it matches any single character (but see below) not from the rest of the list. If two characters in the list are separated by `-', this is shorthand for the full range of characters between those two (inclusive) in the collating sequence, e.g. `[0-9]' in ASCII matches any decimal digit. It is illegal= for two ranges to share an endpoint, e.g. `a-c-e'. Ranges are very collating-sequence-dependent, and portable programs should avoid relying on them. To include a literal `]' in the list, make it the first character (fol- lowing a possible `^'). To include a literal `-', make it the first or last character, or the second endpoint of a range. To use a literal `-' as the first endpoint of a range, enclose it in `[.' and `.]' to make it a collating element (see below). With the exception of these and some combinations using `[' (see next paragraphs), all other special charac- ters, including `\', lose their special significance within a bracket expression. En clair: si tu veux mettre un "-" entre des [], il faut le mettre au début ou à la fin, comme je le disais précédemment, et "\" n'a pas sa signification habituelle entre [], pas plus que ".". Donc tu revrais écrire [a-zA-Z0-9.-]. Moi je conseillerais même [-a-zA-Z0-9.], il me semble avoir vu dans une vie antérieure des implémentations qui n'acceptent le "-" qu'en première position (il faut le mettre à des endroits particuliers pour faire la différence entre un "-" litéral et un "-" qui indique un range, et la syntaxe historique ne prévoit pas qu'on puisse utiliser \ pour ça, mais qu'on le mette a des endroits particuliers). Ceci étant dit je ne sais pas très bien pourquoi ça marche chez OVH, il doit y avoir une implémentation différente des regex sur cette machine-là je pense (il y en a à peu près autant que de versions différentes d'OS...). Jacques.
Galdon Posté 13 Février 2009 Auteur Posté 13 Février 2009 Ah oui c'est ça, merci. J'avais déjà eu des problèmes similaires avant, du coup j'avais remplacé le - par , Maintenant je vais pouvoir utiliser les dash comme bon me semble ! Merci pour vos réponses.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant