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.