2010-03-17 21 views
3

请看看下面的.htaccess的Apache的.htaccess:ErrorDocument的和RewriteEngine叙述不一起工作

ErrorDocument 404 /404/ 

RewriteEngine On 
RewriteRule (.*) index.php [L] 

在此设置下,我使用PHP header('HTTP/1.1 404 Not Found');重定向到错误处理页面,并发送相应HTTP状态码。正确的404状态码被发送,但浏览器显示一个空白页面和访问日志显示"GET /invalid-url/ HTTP/1.1" 404 -

任何人都可以告诉我如何使ErrorDocument与Apache URL重写工作?

回答

1

我想我的问题的答案是:我不需要。 我试图完成的是一个“404重定向”。也就是说,当请求一个无效的URL时,重定向到404文档以及设置“Status 404 Not found”标题。 我不确定这是我想要的,因为无效的URL应该用404状态码标记,而不是重定向。

0

如果您在 ErrorDocument之前定义了重写,它应该可以工作。

+0

嗯,它没有。我认为Benoit是对的。只从PHP发送404头没有内容,不会强制Apache在我的ErrorDocument中定义的URL处提供内容。我希望这一点,但它不会发生。 – bogdanvursu

-2

试试这个

 

ErrorDocument 404 /404.html 

RewriteEngine On 
RewriteRule (.*) index.php [L] 
 
+0

不,那根本没有帮助。另外,更改网址会在我的应用程序中破坏一些东西。 – bogdanvursu

+0

我在RewriteRule中没有任何改变,它和你发布的一样。 我刚刚编辑了你的ErrorDocument行,这当然是正确的,看到这个链接“http://httpd.apache.org/docs/2.0/mod/core.html#errordocument” –

+1

@Gaurav:我知道这个话题是旧的和死亡,但对于任何其他人可能正在阅读......您使用的ErrorDocument是正确的 - **为您的环境**。如果在bogdanvursu的环境中不存在“404.html”,您会怀疑会发生什么?正如Benoit在上面回答的那样,他提供了404错误,但没有发生重定向,因为RewriteRule正在重写为有效的url(index.php),因此ErrorDocument从未被调用过。问题是他的index.php返回了一个404头,但没有提供任何内容,因此用户看不到任何内容。 –

5

是重写规则后,宣布404文件

这是正常的服务器不推任何404错误,您正在使用一个包罗万象的正则表达式((。*))作为唯一的重写规则。

但是你的问题不是真正的htaccess相关。 在php中,如果您发送404头文件,浏览器不会自动重定向到404页面,但您必须自己在PHP中为错误页面内容提供服务,就像大多数带有内部路由系统的框架一样。

+0

Hi Benoit, 所以你只是说发送一个404头不会强制Apache服务于ErrorDocument URL的内容。 如果我提供来自PHP的内容,设置404标题后,我确实在浏览器中显示404页面,但地址栏仍然显示无效URL,而不是/ 404 /。 经过一番思考之后,我想这实际上并不糟糕。 – bogdanvursu

+0

嗨, 你说得对,如果浏览器没有被转发到真正的404页面url,它似乎并不坏。使用ErrorDocument声明Apache也不会重定向。 恕我直言,这是更好的这种方式:搜索引擎爬虫将忘记404响应代码的URL响应,人类将看到一个不错的404页面,而不是Apache的默认页面或更糟糕的页面上有错误。 – Benoit

相关问题