Mod_rewrite réécrivant les choses qu’il est explicitement dit de ne pas

J’ai les réécritures suivantes dans mon fichier .htaccess:

Options +FollowSymLinks RewriteEngine On RewriteRule \.(css|jpe?g|gif|png)$ - [L] RewriteRule ^index/error/([^/\.]+)/?$ index.php?error=$1 [L] 

Comme vous pouvez le constater, il est supposé ne pas réécrire les fichiers .css / .jpg / .jpeg / .gif / .png. Malgré cela, il le fait. Ce qui est vraiment étrange, c’est que la ligne en dessous, celle qui redirige / index / error / what vers index.php? Error = $ 1, fonctionne parfaitement. Y a-t-il quelque chose qui ne va pas avec mon expression régulière? Y a-t-il une meilleure manière de faire cela?

TIA.

EDIT après de nombreuses tentatives pour résoudre le problème plus tard:

J’ai en fait trouvé un moyen différent (à mon avis) plus élégant, certainement plus simple de le faire. Mon problème était que mon fichier contenait un pointeur sur mon fichier CSS sous la forme href = “./ css / styles.css”. Le fichier styles.css ne sera jamais déplacé. Donc, je viens de changer l’élément href pour qu’il soit un URI absolu ( http://www.mysite.com/css/styles.css ) au lieu d’un URI relatif. Problème résolu! Merci à tous ceux qui ont posté pour leur aide.

Vous pouvez utiliser un RewriteCond pour éviter d’appliquer des règles à cet ensemble d’extensions, comme

 Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_URI} !\.(css|jpe?g|gif|png)$ RewriteRule ^index/error/([^/\.]+)/?$ index.php?error=$1 [L] 

De plus, vous ne mentionnez pas quelles demandes échouent et de quelle manière, ce serait bien de savoir si cela ne suffit pas à résoudre votre problème (ce qui est probable).

La dernière règle n’est pas très utile dans .htaccess lorsque l’URL est modifiée – voir mod_rewrite tech . Ici, vous verrez que c’est parce que la réécriture se produit tard dans le traitement de la requête, donc il connaît le répertoire mais il est trop tard pour réécrire l’URL. Il résout ce problème en créant une nouvelle requête et cette nouvelle requête est traitée à nouveau par les mêmes règles, ce qui annule efficacement le “dernier” drapeau.

Je ne peux pas voir comment cela s’applique dans votre cas. Le ‘-‘ ne devrait pas être une réécriture d’url. À partir de ce site Web, ils recommandent d’utiliser les commandes ci-dessous pour déboguer la réécriture et vous devriez voir pourquoi votre règle semble être ignorée.

  You can debug mod_rewriting adding those two directives in httpd.conf: RewriteLogLevel 9 RewriteLog " 

La regex me semble bien et j'ai vu presque le même dans un exemple de mod_rewrite .

J’ai en fait trouvé un moyen différent (à mon avis) plus élégant, certainement plus simple de le faire. Mon problème était que mon fichier contenait un pointeur sur mon fichier CSS sous la forme href = “./ css / styles.css”. Le fichier styles.css ne sera jamais déplacé. Donc, je viens de changer l’élément href pour qu’il soit un URI absolu ( http://www.mysite.com/css/styles.css ) au lieu d’un URI relatif. Problème résolu! Merci à tous ceux qui ont posté pour leur aide.