.htaccess重写ErrorDocument没有被重定向

时间:2019-02-17 15:28:38

标签: php .htaccess

我从URL中删除了php目录,并删除了.php扩展名。 但是现在我正尝试添加404/500错误,以使我的网站看起来不错。

RewriteEngine On
RewriteBase /

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

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

ErrorDocument 404 /errors/404.php
ErrorDocument 500 /errors/500.php

当我将errorDocument重定向到外部页面时,它可以工作,但不能到我的本地文件。我得到一个500 Internal Server error。我可以采取一种解决方法,只是将其转到外部页面,这将是我的页面。但这不是很干净。 有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我认为您必须与DOCUMENT_ROOT相匹配,并在添加RewriteCond %{REQUEST_FILENAME}\.php -f之前添加此.php

RewriteEngine On
RewriteBase /

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/php%{REQUEST_URI}\.php -f
# or you could do it like this 
# RewriteCond %{DOCUMENT_ROOT}/php%{REQUEST_URI} -f
# without php according to your setting
RewriteRule ^(.*)$ /php/$1 [QSA,L]


ErrorDocument 404 /errors/404.php
ErrorDocument 500 /errors/500.php

由于每当您向任何目标目的地发送错误请求时,都必须确保目标会处理该请求,并且有足够的条件来分类应该去哪一个,否则服务器会生成错误。