2011-10-05 71 views
1

请告诉我为什么这不起作用。它正在工作,但莫名其妙地决定停止工作。 在php中,如果找不到页面,则发出404。htaccess ErrorDocument 404重定向不起作用

if(checkPageExists($escaped_url_page_name)){ 
header('HTTP/1.1: 200 OK'); 
}else{ 
header("HTTP/1.0 404 Not Found"); 
die; 
} 

我的htaccess是

php_flag magic_quotes_gpc Off 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

ErrorDocument 404 /404.php 

404页上的根,是名404.php。为什么五分钟前它不工作,什么都没有改变。我用小提琴测试了这个页面,它确实抛出了404,但是重定向没有发生。我已经实现了友好的URL,但我不认为这会影响它,因为htaccess中的“/”指的是我认为的网站的物理根。提前致谢。

+0

这是您的.htaccess文件中的唯一行,还是有其他行可能会影响ErrorDocument行? – Luke

+0

更新整个htaccess – jiraiya

回答

3

我曾经有过类似的问题 - 当PHP抛出404头时,Apache通常不会为它创建一个404页面。 (编辑:它可能与PHP是否输出任何文本有关,我没有真正尝试过它。)如果您在浏览器中检查标题,可以看到404标题起作用,即使页面为空。

我不知道有关的自动化解决方案,但我只是做了一个http_error($code)功能,打印我的自定义错误页,并呼吁与header()一起每当我的代码手动触发404。然后,我结合一些代码来ErrorDocument仅呼叫http_error

ErrorDocument 404 index.php?http_error=404 
ErrorDocument 403 index.php?http_error=403 

...等等。

+0

伟大的答案,这帮了我。太感谢了!! – jiraiya