apache mod_substitute 可以在 curl 中使用,但不能在浏览器中使用

Hem*_*ema 5 apache-2.2 apache-2.4

我有一个如下所示的 mod_substitute,它在 curl 中工作得很好,但在浏览器上却没有。此外,它适用于除一页之外的所有页面。

我想知道什么会导致 mod_substitute 在浏览器上不起作用?如何调试和解决这个问题?

Pet*_*r H 14

要解决此类问题,最好将浏览器中的标头与 curl 中的标头进行比较(-i, --includeflag 将显示标头,并且-Hflag 可以添加它们),并从浏览器一次添加一个到 curl 命令,直到问题重现。

我在mod_substitute 文档页面的评论部分阅读了描述与您描述的症状类似的症状,mod_substitute有时无法按预期工作:

原来这是我们过滤器链的顺序。DEFLATE 在 SUBSTITUTE 之前运行。对于小文件,DEFLATE 没有做任何事情,所以它起作用了。在一些没有发送 Accept-Encoding 标头的内部代理上,它正在工作。但是,其他时候却没有。最后,这效果最好:

AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html text/plain text/xml
Run Code Online (Sandbox Code Playgroud)

另一种选择是取消设置目标资源的 Accept-Encoding 标头,其中mod_substitute应该进行替换。

RequestHeader unset Accept-Encoding
Run Code Online (Sandbox Code Playgroud)

它的(可以说),最好使用其他替代绝招,让你可以收获两个好处mod_deflatemod_substitute虽然。


Hem*_*ema 1

禁用 gzip 压缩可以解决该问题。将以下行添加到 httpd.conf SetEnv no-gzip 1 解决问题