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

时间:2015-02-13 15:29:42

标签: php apache .htaccess url-rewriting

我尝试配置我的htacess有多种原因:

首先,我在此路径中有我的观看页面: mywebsite.fr/views/contact-us.php (例如)。我想访问 / views 中的文件,而不是在网址中,也没有扩展格式;像这样: mywebsite.fr/contact-us

我写了这句话并且工作得非常好:

<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?感谢的

2 个答案:

答案 0 :(得分:0)

除非/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]

答案 1 :(得分:0)

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

<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

现在所有人都正确地工作。