Apache mod_rewrite ne mappant pas l’expression sur le paramètre

J’ai un site qui utilise apache mod_rewrite et travaille depuis 6 mois sans erreur.

J’ai la règle de réécriture suivante:

 RewriteRule ^products/([az\-]+)/$ /products.php?category=$1 [NC,L] 

Voici le code dans ma page products.php

 $category = $_GET['category']; if (isset($category)) { // do some processing here } else { header("Location: /500.html"); exit; } 

Un exemple de lien qui frappe cette règle est /products/lighting-poles/

Est-ce que quelqu’un sait pourquoi la réécriture se produit toujours, mais ne mappe pas le ([az\-]+) à la category=$1 ?

Informaitons supplémentaires

J’ai remarqué que le fichier .htaccess sur l’hôte avait commenté la ligne Options +FollowSymLinks alors j’ai d’abord essayé de réactiver ceci pour que le site renvoie une erreur 500 Apache White Screen.

Plus du fichier .htaccess

  #Options +FollowSymLinks RewriteEngine On RewriteBase / # Add a trailing slash to paths without an extension RewriteCond %{REQUEST_METHOD} !POST RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule ^(.*)$ $1/ [L,R=301] # other rules including problem rule here  

Cela semble morbide comme un problème de plusieurs vues. Multiviews est une opération de négociation de contenu où, si elle est activée, elle essaie quelques éléments supplémentaires dans le pipeline de mappage de fichiers URL pour essayer de trouver un fichier mappé à une URL. Ici, vous avez une URL comme /products/blah , et pourtant, vous avez un fichier appelé products.php , donc les multiviews peuvent essayer de mapper les products à /products.php/blah . Ainsi, en contournant complètement la règle de réécriture, vous ne voyez pas le paramètre category .

Où sont les options, essayez d’append:

 Options -Multiviews