我试着寻找这个问题的答案,但没有成功。基本上我有一个.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
中的行被注释掉或删除,这两种方法也可以让事情继续工作。