2012-03-25 100 views
3

当我尝试使用我的Apache服务器上的.htaccess文件从我的所有文件中删除我的PHP扩展时,一切正常。扩展名被删除了,一切看起来都好多了。Mod_Rewrite扩展删除更改功能404

但是,我遇到了一个小问题:当我通常会转到诸如./nonexistent.php之类的页面时,我会收到404错误。但是,当我重写我的网址时,我转到./nonexistent,而是收到500 Internal Server Error

理想情况下,我想简单地将用户重定向到自定义的“找不到页面”页面,但目前我无法找到一种方法来执行此操作。

下面是我使用的代码:

Options -MultiViews 

RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ $1.php 

我试过设置:ErrorDocument 500 /nope然而,这似乎不有效果无论是。

因此,总结一下,有没有人知道如何重写扩展,同时保持默认的“Page Not Found”系统的功能不变?

回答

2

当您使用上述重写条件请求不存在的文件,你正在运行到无限的重定向。

如果访问http://yoursite.com/i-dont-exist,第一个条件评估为真,i-dont-exist是一个不存在的文件,因此它会尝试重写i-dont-exist.php这也并不存在这样的重写格局一直持续到Apache的限制递归,给你一个500错误(主要是它不断,直到你遇到500错误改写为i-dont-exist.php.php.php.php.php...php

您可以通过添加额外的检查,以确保与.php扩展名的文件改写前存在解决这个问题。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f #make sure $1.php exists before rewriting 
RewriteRule ^(.*)$ $1.php 

如果file.php存在,那么它将重写为它,否则它将不会,并且404错误页将被提供。

+0

drew010,你是对的,另一个答案是实用的,因为它解决了我的问题,但实际上并没有解决它。 – elliottbolzan 2012-03-25 22:13:21

+0

如果你检查你的Apache'error_log',你会看到500错误的确切原因。如果您的网站非常繁忙,那么您将会写入很多错误日志,并使其不必要地增长,从而难以发现和调试实际错误。看看这是否也有帮助。 – drew010 2012-03-25 22:14:39

+0

感谢您的帮助,非常感谢。 – elliottbolzan 2012-03-25 22:15:07