8710 sujets

Développement web côté serveur, CMS

Bonjour, bonsoir !

J'ai un petit problème (qui en est un gros pour moi) avec les regex. Je souhaite avec apache transformer tous les urls de type

www.monsite.com/n'importe quoi en www.monsite.com/index.php?p=n'importe quoi avec les extensions et ou tirets et compagnie.

Voila où est mon problème. J'ai cette petite ligne :

RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1

qui fonctionne pour tout sauf quand il y a des extensions (a cause du .) ou des tirets (-) mais marche avec des tirets(_) et des slashs (/)

Mon unique question : what the **** ? Il y a bien un \- dans mon code et quand je met des \. ça ne marche pas non plus...

Avez vous une solution ?
Merci Smiley cligne
Il ne faut pas échapper le tiret-bas.

Une expression qui fonctionne pour ce que tu veux faire :


^([A-Za-z0-9\-_\/\.]+)$


Cela dit pour réécrire des URL comme tu veux le plus simple et le moins contraignant et de faire un match sur tous les caractères. C'est plus souple.

Il faut aussi que tu penses à vérifier si l'URL n'est pas un fichier ou un dossier existant et aussi à transmettre les éventuels paramètres.

Ce qui donne :


<IfModule mod_rewrite.c>
	RewriteEngine On

	RewriteBase /

	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]
</IfModule>


Je te conseille cet outil pour tester tes expressions rationnelles en temps réel :

http://www.regextester.com/index2.html
Modifié par jb_gfx (01 Jul 2011 - 12:41)