Perl"假装"了404,但让Apache处理它



我试着寻找这个问题的答案,但没有成功。基本上我有一个.htaccess文件,它指定了一个处理404s:的脚本

ErrorDocument 404 /cgi-bin/handle_errors.cgi?404

我有另一个脚本,它通过重写规则根据查询字符串处理页面请求:

RewriteRule ^/path/handler/(.*)$ /cgi-bin/path_handler?$1 [QSA,L]

使得

insaner.com/path/handler/123

将显示由生成的内容

insaner.com/cgi-bin/path_handler?123

如果满足"123"的某些条件。如果没有,我想发出一个"404"状态,但由apache自己处理(事实上,然后由/cgi-bin/handle_errors.cgi?404处理)。那么,这样的事情有可能吗?我知道我可以在打印404状态后从脚本中调用/cgi-bin/handle_errors.cgi?404,但有没有办法让apache处理404?也就是说,如果我稍后在.htaccess中注释掉这行,那么apache会发布其标准404响应?

此外,

 print "Status: 404nn";

足够浏览器使用吗?或者我需要做什么:

 print "Status: 404 Not Foundnn";

或者类似的东西?

在CGI.pm文档中找到了我问题的第二部分的答案:

请注意,人类可读短语也应呈现给符合RFC 2616第6.1节。


编辑:

这可以通过让路径处理程序脚本打印Status:代码,然后只打印LWP::UserAgent请求的结果(这可能会破坏过程中的重要环境变量和数据)来解决。因此,是可行的,但不是我推荐的方法。最好将错误处理程序代码分解为一个模块,然后路径处理程序可以调用该模块来生成内容,避免了涉及apache的额外步骤,并允许您保留任何变量和数据(并在需要时进行处理)。正如我最初提出的问题,是的,即使.htaccess中的行被注释掉或删除,这两种方法也可以让事情继续工作。

最新更新