Pb: Reécriture d'url et .htaccess

Eléphant du PHP | 112 Messages

28 janv. 2009, 17:50

Bonjour,

Après recherches et tatonnements, j'ai adopté ce code

Code : Tout sélectionner

Options +Follow Symlinks RewriteEngine on RewriteBase /monrep/ RewriteRule ^([[:alpha:]]).html$ index.php?champ=$1&envoi=OK
dans l'espoir de transformer une url du type

Code : Tout sélectionner

/index.php?champ=$var&envoi=OK
en ceci

Code : Tout sélectionner

/$var.htm
en lieu de quoi le serveur me retourne:
"Internal Server Error..."
Et je ne trouve rien dans les fichiers log qui puisse m'éclairer.
Merci pour vos lumières,
cordialement

Thierry

Mammouth du PHP | 991 Messages

28 janv. 2009, 19:45

Bonjour

Essaye de faire sans de "$" pour $var.htm.

Bonne soirée Hawk
DevOps, Symfony4, Hoa

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 janv. 2009, 19:52

L'erreur 500 vient d'un problème au niveau d'apache. Il rencontre donc un problème à la lecture de ton .htaccess, c'est donc plus un problème de syntaxe qu'il faut chercher...

En l'occurence, je ne suis pas certains qu'apache connaisse la classe [[:alpha:]] ... à vérifier, mais tu doit normalement pouvoir utiliser [a-zA-Z] sans problème :) (y a pas d'accent dans les urls)

A noter également que ".html" dans la regexp ne correspond pas à l'extension ".html" mais à "n'importe quel caractère suivi des lettres html". Pour signifier qu'il s'agit bien du caractère point, il faut l'échaper à l'aide d'un antislash : "\.html" ;)

Ps : quant à ta transformation, si ta règle gère les .html et que tu saisis un .htm, elle ne sera pas appliquée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 112 Messages

28 janv. 2009, 20:15

Bonjour,

Merci pour ces réponses; de mon coté, j'ai un peu avancé, je ne plante plus Apache, mais toujours pas de redirection. Voici le nouveau code:

Code : Tout sélectionner

RewriteRule ^([a-z])\.html$ /index.php?champ=$1&envoi=OK [L]
J'ai fait pour tester:

Code : Tout sélectionner

RewriteRule ^index\.html$ /index.php [L]
et ça marche.
D'où ma perplexité...
Merci,

Thierry

Eléphant du PHP | 170 Messages

29 janv. 2009, 17:01

Salut,

Code : Tout sélectionner

RewriteRule ^([a-z])\.html$ /index.php?champ=$1&envoi=OK [L]
[a-z] représente un caractère compris entre a et z.
tu ne vas donc réécrire que les URL : a.html, b.html, ... ,z.html

pour accepter plusieurs caractères il faut l'indiquer : [a-z]+
( "+" est un quantificateur qui signifie "un ou plusieurs" )

Fais une recherche avec "URL rewriting" et "expressions régulières POSIX".

Eléphant du PHP | 112 Messages

01 févr. 2009, 16:01

Oui, blof, merci pour ta réponse.
Cependant mon problème reste entier, et une recherche avec URL rewriting ne me donne pas la réponse recherchée.
Mais ma question maintenant déborde de l'intitulé de ce thread, je la formule donc dans un nouveau message.
Merci,
Thierry