apache2 donne 404 avant la réécriture

J’ai une règle de réécriture dans mon .htaccess:

 RewriteEngine On RewriteBase / RewriteRule ^vt$ vt.php [L]  

Si le fichier ‘vt’ existe dans le répertoire de mon site Web, la réécriture est bien effectuée. mais si le fichier ‘vt’ n’existe pas, apache2 ne donne qu’une erreur 404.

il semble donc que apache2 réécrit après avoir vérifié le fichier stat. Comment puis-je réparer ça?


Je pense que c’est un bug. J’utilise cette règle finalement pour éviter d’utiliser deux fichiers (vt et vt.php).

 RewriteRule ^vt$ - [H=application/x-httpd-php] 

Cela ressemble à deux choses qui se passent ici.

  1. Mod_rewrite ne semble pas être chargé
  2. Multiviews fait apparaître comme si mod_rewrite était chargé

Ce que fait Multiviews fait partie de mod_negotiation qui essaie de “deviner” à quoi sert la requête si elle manque des choses comme une extension. Donc, avec Multiviews activé, s’il voit une demande pour /vt et que le fichier vt n’existe pas, il devine et trouve /vt.php et le sert, sinon il ne fait rien et retourne un 404. Cela le rendrait apparaît comme si la règle mod_rewrite était réellement appliquée. Si mod_rewrite est activé, il appliquerait la règle même si mod_negotiation était activée et que le fichier était manquant (ce qui entraînerait un 404).

Donc, assurez-vous que mod_rewrite est bien chargé. Pour ce faire, vérifiez votre fichier httpd.conf et il devrait y avoir une ligne qui ressemble à ceci (sans commentaire):

 LoadModule rewrite_module modules/mod_rewrite.so 

Ou vous pouvez essayer de supprimer le , si vous obtenez une erreur de serveur 500, mod_rewrite n’est pas chargé.

Ensuite, ajoutez cette ligne dans votre fichier htaccess pour désactiver les Multiviews :

 Options -Multiviews 

Vous pouvez simplement définir “/” comme ” document d’erreur 404 ” en ajoutant la ligne suivante à votre fichier .htaccess afin que les visiteurs reviennent sur votre page d’accueil ou index.php .

 ErrorDocument 404 / 

Si vous voulez qu’ils soient redirigés vers une page spécifique , utilisez simplement

 ErrorDocument 404 /path/to/your/404/file.ext