.htaccess
ErrorDocument 404
Aucune redirection lors de l'utilisation de règles de réécriture. Une erreur de serveur interne 500 se produit.
Non RewriteRule
时,ErrorDocument
fonctionne correctement.
Mon code
RewriteEngine On <IfModule mod_rewrite.c> RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /stores/ [NC,L] ErrorDocument 404 /404.html </IfModule>
Le "problème" avec cette règle est que si vous demandez un fichier qui n'existe pas et que le fichier n'existe pas dans le sous-répertoire /subdirectory/, cela provoquera une boucle de réécriture infinie (d'où le 500 Internal Server que vous voir Erreur) car il tente la réécriture suivante :
Vous n'avez pas réellement précisé ce que vous essayiez d'atteindre, mais je suppose que /stores est un sous-répertoire "caché" et que vous aviez l'intention d'écraser les fichiers réels dans le sous-répertoire /stores. C'est la seule manière pour qu'une telle règle fonctionne avec la directive ErrorDocument 404 définie dans Apache.
Ainsi, lors de la réécriture dans le sous-répertoire /stores, vous devez d'abord vérifier si la requête sera mappée à un fichier réel avant d'émettre la réécriture. De cette façon, toute demande concernant un fichier qui n'existe pas et n'est pas mappé au sous-répertoire /stores sera transmise au 404 ErrorDocument défini par Apache.
Par exemple, essayez d'utiliser le code suivant :
Pas besoin de conteneur
<IfModule>
(mais vous mettez la directive RewriteEngine en dehors de ce conteneur, ce qui n'a aucun sens).Si le fichier .htaccess se trouve à la racine du document, la directive RewriteBase n'est pas nécessaire.
Structurellement, il est préférable de définir d'abord ErrorDocument.