htaccess 404 a cessé de fonctionner

J’ai eu une page de redirection d’erreur 404 personnalisée fonctionnant très bien via htaccess. Cependant, après avoir ajouté le nouveau code à htaccess, il a cessé de fonctionner. Qu’est-ce qui cause le conflit et comment puis-je le résoudre?

EDIT: J’ai essayé de mettre la ligne ErrorDocument en haut de la page et ça ne marche toujours pas.

code htaccess:

RewriteEngine On #Removes www RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule . http://%1%{REQUEST_URI} [R=301,L] #Redirects to extensionless php urls RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /([^&\ ]+).php RewriteRule .* /%1? [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ $1.php [L] #Redirect nonexistent files to a 404 page (not working) ErrorDocument 404 /404.html 

Le problème n’est pas de placer ErrorDocument en haut ou en bas de votre htaccess.

Vous avez une boucle infinie à cause de votre règle (celle qui réécrit l’extension php ).
Vous devez vérifier si elle existe avant de la réécrire, sinon vous obtiendrez un conflit de boucle entre votre règle et ErrorDocument .

Vous pouvez remplacer votre code actuel par celui-ci

 RewriteEngine On #Remove www RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] #Hide php extension (only for existing files) RewriteCond %{THE_REQUEST} \s/(.+)\.php(?:\s|\?) [NC] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ /%1? [R=301,L] #Redirect to extensionless php urls (only if it exists) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ /$1.php [L] #Redirect nonexistent files to a 404 page ErrorDocument 404 /404.html 

mettre l’instruction errorDocument en haut du fichier. Au-dessus de l’instruction RewriteEngine.

Ceci est la solution, mais je ne peux pas vous dire pourquoi le code htaccess ci-dessus fait que cela échoue.