Besoin d'aide concernant le Mod Rewrite d'Apache et .htaccess

Résolu
roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 - 18 juin 2009 à 15:45
roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 - 18 juin 2009 à 18:45
Bonjour à tous,

J'ai besoin d'aide concernant le Mod Rewrite d'Apache.

J'arrive à faire plus ou moins ce que je veux suite à plusieurs recherche mais j'ai encore une ou deux difficultées.

Je m'explique,

Mon url est composée de la façon suivante.

http://www.monsite.com/index.php?module=MONMODULE&action=MONACTION

Le nom du module est obligatoire mais pas l'action. Si celle-ci n'est pas mentionnée ont est redirigé vers la page par defaut du module.

Actuellement la règle suivante :

RewriteRule ^(.+)/(.+)\.html$  index.php?module=$1&action=$2  [L]

me donne http://www.monsite.com/MONMODULE/MONACTION.html

et celle-ci :

RewriteRule ^(.+)\.html$  index.php?module=$1 [L]

me donne http://www.monsite.com/MONMODULE.html

Mais si on indique comme url http://www.monsite.com/MONMODULE sans le html ainsi que http://www.monsite.com/MONMODULE/ on obtient une page d'erreur 404 ce qui n'est voulu.

J'aimerai que

http://www.monsite.com/MONMODULE.html
ET
http://www.monsite.com/MONMODULE
ET
http://www.monsite.com/MONMODULE/

Corresponde à http://www.monsite.com/index.php?module=MONMODULE

et que

http://www.monsite.com/MONMODULE/MONACTION.html

ET

http://www.monsite.com/MONMODULE/MONACTION

ET

http://www.monsite.com/MONMODULE/MONACTION/

Corresponde à http://www.monsite.com/index.php?module=$1&action=$2

Je me doute qu'il doit y avoir quelque chose qui manque comme une condition X ou Y mais je ne vois pas comment la retranscrire.

Voici le contenu de mon .htaccess

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^(.+)/(.+)\.html$  index.php?module=$1&action=$2  [L]
RewriteRule ^(.+)\.html$  index.php?module=$1  [L]

Merci à vous pour votre aide.

Matt.

2 réponses

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
18 juin 2009 à 17:29
Ceci "^(.+)\.html$" ne gère que les URL comme ceci "http://www.monsite.com/MONMODULE.html". Si tu enlèves le .html, ça ne correspond plus à ton expression que tu as dans ton htaccess et il ne sera pas du tout transformé (donc une erreur 404).

Ce que je te propose c'est de changer ton "\.html" par "(\.html|\/)?" dans tes 2 expressions pour qu'il prenne en charge les 2 autres synthaxe que tu veux.
3
roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 1
18 juin 2009 à 18:45
Salut Arto_8000,

Tout d'abord merci à toi de m'avoir répondu.

J'ai suivi ta proposition et je l'ai adaptée car pour

RewriteRule ^(.+)/(.+)(\.html|\/)?$  index.php?module=$1&action=$2  [L] dans le .htaccess

module valait toujours -> index.php et action valait que dalle.

Mais en enlevant le ? dans l'expression, celle-ci fonctionne parfaitement.

Encore merci à toi d'avoir pris le temps de me répondre.

Bien à toi.

Matt.
3