URL Rewrting sur sous-dossier virtuel

Nouveau WRInaute
Bonjour !

J'ai un problème sans doute très simple à résoudre, mais auquel je n'ai pas trouvé la solution.

Je veux rediriger "www.site.com/films/categorie/" ainsi que "www.site.com/films/categorie" vers "www.site.com/films/index.php?var=categorie".

Aucun problème pour le premier cas, la règle suivante fonctionne :
Code:
RewriteRule   ^films/(.+)/$   /films/index.php?var=$1  [L]

En revanche, pour le second cas (l'url sans le "/" final), la règle suivante provoque un plantage :
Code:
RewriteRule   ^films/(.+)$   /films/index.php?var=$1  [L]

Pouvez-vous m'indiquer d'où vient le problème, et comment le résoudre ?

Merci par avance ! :)
K.
 
WRInaute passionné
Draxx a dit:
En revanche, pour le second cas (l'url sans le "/" final), la règle suivante provoque un plantage :
Code:
RewriteRule   ^[b]films/(.+)[/b]$   [b]/films/index.php[/b]?var=$1  [L]

Pouvez-vous m'indiquer d'où vient le problème, et comment le résoudre ?

Merci par avance ! :)
K.

Salut et bienvenue sur le forum,

À première vue, ta règle de rewrite englobe ta nouvelle redirection, ce qui provoquerait une boucle sans fin lors du 2ème passage, puis N passage.

RewriteRule ^films/(.+)$ /films/index.php?var=$1 [L]

Pourquoi ça part en boucle ? Parce que mod_rewrite rejoue N fois les règles de réécriture jusqu'à converger vers une URL qui n'est pas réécrite. Contrairement à ce qu'on croit, [L] va arrêter le cycle de réécriture en cours mais pas le cycle complet.

Tu peux peut-être t'en sortir avec quelque chose du stye

Code:
RewriteCond %{REQUEST_FILENAME} !index.php
 
Nouveau WRInaute
Mais oui, c'est évident, maintenant que tu le dis !!
Je n'avais pas pensé à ce "léger" détail...
Je vais tester ta condition de ce pas, merci ! :)

(Chouette avatar, au passage ! :p)
 
Nouveau WRInaute
Yeah !

Bon, la bonne nouvelle, c'est que ça fonctionne ! \o/
La mauvaise, c'est que ça fonctionne un peu trop bien..

Avec le code suivant, toutes mes pages sont redirigées vers films/index.php.
Il semble que la première règle, qui fonctionnait très bien avant, ne soit plus prise en compte,
et soit "écrasée" par la dernière. Est-ce normal ?

Code:
RewriteRule   ^films/(.+)/(.+)$   /films/film.php?categorie=$1&film=2  [L]
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule   ^films/(.+)$   /films/index.php?categorie=$1  [L]

Merci par avance ! :)

EDIT : Désolé pour le post inutile, j'ai trouvé la solution ! Le problème était assez similaire à celui de ma première règle.. J'ai donc rajouté la condition suivante pour éviter que le moteur ne réécrive mon url finale :

Code:
RewriteCond %{REQUEST_FILENAME} !film.php
 
Discussions similaires
Haut