Apache .htaccess 404错误重定向

问题描述:

我试图做一个htaccess文件,将通过index.php重定向所有404错误。我希望用户无法访问的页面被附加到index.php的URL,以便我可以找出哪些页面请求失败。Apache .htaccess 404错误重定向

例如,如果他们试图访问http://example.com/doesntexist.php,阿帕奇应重定向到http://example.com/index.php/doesntexist

这是我有:

RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php?%{QUERY_STRING} [L] 

这个工作对我的主机商之一,但是当我转移失败网站到另一个虚拟主机(GoDaddy)。

谢谢你们

我现在不能测试此权利,但根据this answer,当你设置一个

ErrorDocument /404.php 

(或index.php文件,无所谓)

变量$_SERVER["REQUEST_URI"]将包含原始的失败请求。

+0

谢谢你的回答。这个解决方案工作正常,但我可能误解了我的问题。我不希望Apache发送404页眉。这就是我使用重写条件的原因。我怎样才能使一个htaccess与“ErrorDocument /404.php”产生的效果相同,除了没有404头? – Nathan 2011-03-04 05:39:02

+0

@Nathan啊!嗯,这可能很难。 PHP有['header_remove()'](http://www.php.net/header_remove),但它似乎没有删除以前由Apache设置的标头。你确定GoDaddy有URL重写吗? – 2011-03-04 08:55:04

直接解决方案的一个注意事项,因为这阻止了适当的ErrorDocument重定向工作。希望这可以作为任何碰巧遇到同样错误的人的参考。

我已经创建了一个.htaccess,把

ErrorDocument 404 /Error/404.html 

但重定向从未工作,并默认页面未找到被代替。
问题实际上在于apache2.conf(或httpd.conf)中的设置。

删除线之下立即解决的问题

AllowOverride None 

它禁止的.htaccess从覆盖默认设置。