[.htaccess] Héritage, ça boucle

WRInaute passionné
Bonjour,

Je veux :
1/ que tous les appels de page avec index.php soit redirigé vers la racine du dossier (exemple/index.php -> exemple/)
2/ que tous les appels sans extension et sans slash final soient redirigés vers la racine du dossier (exemple -> exemple/)

A ce niveau cela semble fonctionner (voir .htaccess à la racine ci-dessous).

Maintenant pour que ces règles soient appliquées partout, je fais un RewriteOptions inherit dans les .htaccess des répertoires enfants (sachant que les règles héritées s'exécutent après les règles du répertoire courant).

Et enfin la règle qui pose problème :
3/ je veux que tous mes appels soient redirigés en interne vers index.php qui gère les rewrites (voir .htaccess du répertoire enfant membre ci-dessous).



.htaccess à la racine
Code:
RewriteEngine on
RewriteBase /

# Redirige les URL sans slash à la fin
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1/ [R=301,L]

# Redirige vers la page index.php
RewriteCond %{REQUEST_URI} (.*)index\.php$
RewriteRule .* %1 [R=301,L]

.htaccess du répertoire enfant membre
Code:
RewriteEngine on
RewriteOptions inherit
RewriteBase /membre/

RewriteCond %{REQUEST_URI} !index.php$
RewriteRule .* index.php [L]

Ca boucle.
J'ai essayé plein de choses sans succès... j'espère que la problématique est correctement posée.
Une idée ? Merci.
 
WRInaute impliqué
salut,

je me dit que ta problèmatique doit pouvoir se faire sans inhérit possiblement comme ceci (très certainement à debugger) :

Code:
RewriteEngine on
RewriteBase /

# Redirige les URL sans slash à la fin
RewriteCond %{REQUEST_URI} !.*\..+$
RewriteCond %{REQUEST_URI} !.*/$
RewriteRule (.*) $1/ [R=301,L]

# Redirige vers la page index.php
RewriteCond %{REQUEST_URI} (.*)index\.php$
RewriteRule .* %1 [R=301,L]

a+
 
WRInaute accro
si a tu trouvé la solution up stp :D

pour moi le moteur va grouper les 2 fichiers pour en voir qu'1 seul avec un ordre d'interpretation des regles, d'ou la boucle car le fichier se rapel au moins 1 fois, perso je ferais la redirection en php dans les rép children pour n'avoir qu'un apel du fichier .htaccess
 
WRInaute passionné
La solution consiste à mettre un indicateur.

enfant
Code:
RewriteRule .* index.php?internal_redirect=1 [L]

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

parent
Code:
# Redirige vers la page index.php
RewriteCond %{QUERY_STRING} !internal_redirect=1
RewriteCond %{REQUEST_URI} (.*)index\.php$
RewriteRule .* %1 [R=301,L]

Pour tester, j'ai essayé d'ajouter RewriteCond %{IS_SUBREQ} false afin d'éviter de boucler sur les cycles suivants mais ça ne fonctionne pas.
 
Discussions similaires
Haut