500 Erreur de serveur interne due à la configuration htacess

J’ai essayé de configurer mon htacess pour de multiples raisons:

J’ai d’abord mes pages vues dans ce chemin: mywebsite.fr/views/contact-us.php (par exemple). Je veux accéder aux fichiers dans les vues / sans être dans l’URL et sans format d’extension; comme ceci: mywebsite.fr/contact-us

J’ai écrit ces lignes et ça marche très bien:

 Options +FollowSymlinks RewriteEngine on RewriteBase / # Retirer les extensions des pages et les rendre accessibles en lecture RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /([^\ ]+)\.php RewriteRule ^/?(.*)\.php$ /$1 [L,R=301] # check to see if the request is for a PHP file: RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^/?(.*)$ /$1.php [L] # WWW => domaine RewriteCond %{HTTP_HOST} www.mywebsite.fr RewriteRule (.*) http://mywebsite.fr$1 [L,R=301] # Suppression d'un sous répertoire RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) /views/$1 [QSA,L] 

Mais lorsque j’essaie d’ouvrir une page inexistante, j’ai une redirection dans l’erreur de page 500 Erreur de serveur interne au lieu de ma page 404 personnalisée …

Ces pages d’erreur sont dans ce chemin: mywebsite / views / errors / 404.php

Et j’ai écrit ces lignes dans mon fichier htaccess:

 ErrorDocument 404 /views/errors/404 

Peut-être que quelqu’un peut me dire pourquoi la page 404 n’est pas déployée? Merci

À moins que vous n’ayez un fichier htaccess dans /views/ avec des règles de réécriture, cette règle provoquera une boucle de réécriture:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) /views/$1 [QSA,L] 

Si vous allez à /not-exist les deux conditions passeront, et l’URI sera réécrit dans /views/not-exist , et les boucles du moteur de réécriture. Étant donné que cela n’existe pas non plus, vos conditions seront à nouveau remplies et l’URI sera réécrit dans /views/views/not-exist , etc.

Essayer:

 RewriteCond %{DOCUMENT_ROOT}/views/$1 -f [OR] RewriteCond %{DOCUMENT_ROOT}/views/$1 -d [OR] RewriteCond %{DOCUMENT_ROOT}/views/$1.php -f RewriteRule (.*) /views/$1 [QSA,L] 

Ok, j’ai finalement trouvé la solution:

  Options +FollowSymlinks RewriteEngine on RewriteBase / # Retirer les extensions des pages et les rendres accessibles en lecture RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /([^\ ]+)\.php RewriteRule ^/?(.*)\.php$ /$1 [L,R=301] # check to see if the request is for a PHP file: RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^/?(.*)$ /$1.php [L] # Suppression d'un sous répertoire RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/views/$1.php -f RewriteRule (.*) /views/$1 [QSA,L]  

Et pour mes pages d’erreur personnalisées:

 ErrorDocument 401 /views/errors/401.php ErrorDocument 403 /views/errors/403.php ErrorDocument 404 /views/errors/404.php ErrorDocument 500 /views/errors/500.php 

Maintenant, tout fonctionne correctement.