Erreur de serveur interne lorsque le fichier ou le dossier n’existe pas

J’utilise ce code de réécriture pour réécrire toutes les requêtes au fichier .php :

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)$ $1.php [L] 

Donc, lorsque j’entre dans l’ index le index.php se charge ou si j’entre en contact le contact.php va charger.

Mais quand j’entre un nom qui n’existe pas, j’obtiendrai une erreur de serveur interne, par exemple, j’ai saisi ce nom de test ou fdgdfg/ewrtt/ddfghdfg , après cela, j’aurai cette erreur:

 Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request. 

J’ai également ErrorDocument 404 error.php dans mon ErrorDocument 404 error.php .htaccess .

Ceci est mon fichier complet .htaccess :

 ErrorDocument 404 index.php RewriteEngine on RewriteBase /shop RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)$ $1.php [L] 

Vous devez vérifier que le fichier php existe réellement, sinon les 2 conditions que vous avez seront toujours .php l’échec et l’extension .php ne cessera pas d’être ajoutée, par exemple vous obtiendrez un URI ressemblant à:

 /shop/foo.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php 

jusqu’à ce que la limite de récursivité interne soit atteinte et que vous obtenez une erreur 500. Essayez d’append une autre condition pour vérifier si le fichier existe:

 ErrorDocument 404 index.php RewriteEngine on RewriteBase /shop RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule (.*)$ $1.php [L] 

Suite à résoudre mon problème –

 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^\.]+)$ $1.php [NC]