Maison > Questions et réponses > le corps du texte
.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>
P粉6052337642024-01-11 09:26:16
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 :
ErrorDocument 404 /404.html RewriteEngine On # 如果该目录中存在文件,则将请求重写到“/stores”目录 RewriteCond %{DOCUMENT_ROOT}/stores/ -f RewriteRule (.+) stores/ [L] # (可选)将根目录的请求重写为“/stores/” RewriteRule ^$ stores/ [L]
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.