problème réécriture de /?p=page en /page

Nouveau WRInaute
Bonsoir,
j'ai un site avec une page index.php à la racine qui inclut la page demandée dans le
paramètre p, par exemple : /index.php?p=contact ou simplement /?p=contact.
J'aimerais transformer ca en : /contact

J'ai donc écrit dans .htaccess :
Code:
RewriteEngine on
RewriteRule ^(\w+)$ ?p=$1

Ca fonctionne parfaitement en local. Mais dès que j'y place sur le
serveur, il me retourne une erreur 404 ou pire 500.
J'ai essayé de :
- remplacer \w par [a-z] (même si ce n'est pas équivalent) : aucun effet
- remplacer \w par . ou \w+ par \w*: erreur 500 !
- ajouter Options +FollowSymLinks (même si j'ai pas cerné l'intérêt)
- ajouter [L] ou [QSA] (on sait jamais)
- remplacer ?p= par /?p= ou index.php?p= ou /index.php?p= : aucun effet
- etc...

Je ne connais pas exactement la version d'Apache, mais je pense à Apache
2. En local, j'ai la 2.0.58.

J'ai lu ce que je pouvais sur l'URL rewriting, dont partie de la doc Apache, et je ne vois pas quelle requête effectuer à google pour un problème aussi vague.

En attendant, j'ai placé

RewriteRule ^liens$ ?p=liens
RewriteRule ^contact$ ?p=contact
RewriteRule ^recrutement$ ?p=recrutement
etc...

à la place, et ca dépanne.

D'avance merci pour votre aide.
 
Nouveau WRInaute
KOogar a dit:
Code:
RewriteRule   ^([^/]*)\$    /index.php?p=$1 [L]
ou
RewriteRule   ^([^/]*)\$    index.php?p=$1 [L]
Merci, mais ca ne peut pas fonctionner si tu échappes le $.
Code:
RewriteRule ^([^/]*)$ index.php?p=$1 [L]
fonctionne. Mais je ne comprends pas pourquoi. Du moment que la partie locale de l'URL ne contient pas de slash, ce code devrait être équivalent à ^(.*)$ non ? D'ailleurs, le dernier slash du nom de domaine appartient bien à la partie locale ? Dans ce cas, il faudrait écrire ^/([^/]*)$, ce qui ne fonctionne pas...
 
WRInaute accro
[^/]* prend tous les caractères sauf / dans le cas présent, ^(.*) prend tous les caractères y compris le /
En fait certain serveur pointe directement derriere le / et le rajoute par defaut comme le tien, c'est super mal fait et ca fait doublon, donc soit tu marques l'url entiere, soit tu enlèves le / pour éviter le doublon.
Pour le \$ je ne savais pas car je n'avais jamais tester, j'ai appris qq chose today!! perso je préfère laisser l'extension d'une manière générale pour ne pas embrouiller les surfers qui sont déjà assez noob comme ca.
 
Discussions similaires
Haut