500由于htaccess配置导致内部服务器错误


500 Internal Server Error due to htacess config

我试图配置我的htaccess有多种原因:

首先,我的视图页面位于以下路径:mywebsite.fr/views/contact-us.php(例如)。我希望访问/views中的文件,而不使用url和扩展名格式;如下:mywebsite.fr/联系我们

我写了这几行,效果很好:

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
# Retirer les extensions des pages et les rendre accessibles en lecture
RewriteCond %{THE_REQUEST} ^[A-Z]{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]

但当我试图打开一个不存在的页面时,我在页面错误500内部服务器错误中重定向,而不是我的404页面自定义。。。

这些错误页面位于以下路径中:mywebsite/views/errors/404.php

我在我的htaccess文件中写了这几行:

ErrorDocument  404  /views/errors/404

也许有人可以告诉我为什么页面404没有部署?感谢

除非/views/中有一个htaccess文件,其中包含重写规则,否则此规则将导致重写循环:

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

如果转到/not-exist,这两个条件将通过,URI将被重写为/views/not-exist,重写引擎将循环。由于这也不存在,您的条件将再次通过,URI将被重写为/views/views/not-exist等。

尝试:

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]

好的,我终于找到了解决方案:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /
    # Retirer les extensions des pages et les rendres accessibles en lecture
    RewriteCond %{THE_REQUEST} ^[A-Z]{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]
</IfModule>

对于我的自定义错误页面:

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

现在一切正常。