我有一个如下所示的 mod_substitute,它在 curl 中运行良好,但在浏览器上却不行。此外,它在除一个页面之外的所有页面上都有效。
我想知道什么原因导致 mod_substitute 在浏览器上不起作用?如何调试和修复此问题?
答案1
为了解决此类问题,最好将浏览器中的标题与 curl 中的标题进行比较(-i
,--include
flag 将显示标题,-H
flag 可以添加标题),然后从浏览器中向 curl 命令中一次添加一个,直到问题重现。
我读mod_substitute 文档页面的评论部分描述了类似于您所描述的症状,mod_substitute
有时不能按预期工作:
事实证明,这是由我们的过滤器链的顺序决定的。DEFLATE 在 SUBSTITUTE 之前运行。对于小文件,DEFLATE 不会执行任何操作,因此它有效。在某些未发送 Accept-Encoding 标头的内部代理上,它可以正常工作。但是,其他时候则不行。最后,这个效果最好:
AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html text/plain text/xml
另一个选择是取消设置mod_substitute
应该进行替换的目标资源的 Accept-Encoding 标头。
RequestHeader unset Accept-Encoding
但(可以说)最好使用另一个技巧,这样您就可以同时获得mod_deflate
和的好处mod_substitute
。
答案2
禁用 gzip 压缩可以解决问题。将以下行添加到 httpd.conf SetEnv no-gzip 1 可以解决问题