.htaccess内部服务器错误:ErrorDocument无法正常工作(RewriteEngine on)

时间:2014-08-17 20:38:48

标签: php .htaccess mod-rewrite

每当我在ErrorDocument上有RewriteEngine时 - 部分无效。 这是我目前的.htacces文件:

ErrorDocument 404 404.php

Options -MultiViews
RewriteEngine On
RewriteBase /

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

因此,当我在浏览器中打开一个不存在的文件时,出现500内部服务器错误,我没有被重定向到404.php文件。

请帮帮我;)

1 个答案:

答案 0 :(得分:2)

这是因为您盲目地将.php重写为URI的末尾。我们来看看当你转到404网址时会发生什么:

  • 您要求:http://example.com/blahblah
  • URI不是文件(通过!-f
  • URI不是目录(通过!-d
  • URI与(.*)匹配。
  • 重写URI以包含.php
  • URI现在是/blahblah.php
  • URI不是文件(通过!-f
  • URI不是目录(通过!-d
  • URI与(.*)匹配。
  • 重写URI以包含.php
  • URI现在是/blahblah.php.php
  • URI不是文件(通过!-f
  • URI不是目录(通过!-d
  • URI与(.*)匹配。
  • 重写URI以包含.php
  • URI现在是/blahblah.php.php.php

您需要确保您正在重写的内容实际存在或导致循环:

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