[URL REWRITING] Incohérence avec le fichier index ?

WRInaute passionné
Bonjour,

Pourquoi cette règle fonctionne.
Code:
RewriteRule (.*)index\.php$ /$1 [R=301,L]
http://www.example.com/index.php renvoie vers http://www.example.com
C'est à dire que si http://www.example.com est appelé Apache passe outre cette règle.


En revanche, si l'on écrit la règle suivante pour capturer tout ce qui pourrait exister comme appel de page ou de dossier.
Code:
RewriteRule (.+) / [L]
Apache plante avec Internal Server Error.
Parce qu'il doit tourner en boucle étant donné que la redirection vers / appelle pour lui index.php


Hors si index.php semble être appelé dans ce cas, pourquoi le 1er exemple ne tourne pas en boucle non plus ?

J'espère avoir été suffisamment clair.

Ou est la logique ?

Merci
 
WRInaute accro
Ce n'est pas une question de fichier appelé, mais d'URI affiché.

Dans le premier cas, tu demandes à ce que tout ce qui se termine par "index.php" soit redirigé (R=301) vers le même URI, sans index.php.

Exemple:

/index.php -> / [ton test]
mais aussi
/anythingindex.php -> /anything
/dossier/sous-dossier/index.php --> /dossier/sous-dossier/

Le second ne redirige pas: il réécrit.

Je suppose que ton objectif est de gérer la réécriture via index.php (donc par l'identification de $_SERVER['REQUEST_URI']) ?
Tu dois à mon avis le présenter comme ceci:

Code:
RewriteRule (.+) /index.php [L]

--> et c'est dans index.php que tu vas définir que si l'URI est "index.php", il faut rediriger vers la racine.
 
WRInaute passionné
HawkEye a dit:
Tu dois à mon avis le présenter comme ceci:

Code:
RewriteRule (.+) /index.php [L]

--> et c'est dans index.php que tu vas définir que si l'URI est "index.php", il faut rediriger vers la racine.

Pas mieux, voici la réponse de Firefox.
Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas.

La solution je l'ai :

Code:
RewriteEngine on

RewriteRule (.*)index\.php$ /membre/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule .+ /membre/ [L]
Mais ma question reste la même, si index.php semble être appelé dans la seconde règle, pourquoi la 1ere règle ne tourne pas en boucle non plus ?

Merci
 
WRInaute passionné
En fait la question est encore plus simple que ça.

Pourquoi cette règle renvoie "Internal Server Error" quand j'appelle http://www.example.com/membre/ ?

Code:
RewriteRule .+ /membre/ [L]
Le .htaccess est dans membre.
La règle ne capture donc rien, aucun caractère.
Ce qui ne correspond pas à .+ (au moins un caractère).


Et c'est à ce niveau qu'il ne faut pas me répondre qu'Apache appelle index.php :) sinon cf règle 1.
 
Discussions similaires
Haut