RewriteRule [E=CONTENT_TYPE:foo/bar] 对 Apache/mod_php 没有影响

RewriteRule [E=CONTENT_TYPE:foo/bar] 对 Apache/mod_php 没有影响

我曾是尝试去阻止 PHP 解析 POST 请求。当它看到相应的 MIME 类型时,它会自动执行此操作。为此,我考虑了以下 RewriteRule hack:

RewriteCond %{HTTP:Content-Type} ^(multipart/form-data\s*;.*)$   
RewriteRule mime.php - [E=CONTENT_TYPE:no/parsing;old=%1]

但 CGI 环境仍然包含原始[CONTENT_TYPE] => multipart/form..

  • 我可以轻松设置例如 ALT_CONTENT_TYPE,但这对我没用,因为 PHP 仍然按照原始方式运行。
  • 同样,改变大小写[E=ContEnt_Type]不会删除旧的标题值,它实际上只是改变大小写。
  • CONTENT_TYPE 环境变量是在稍后阶段构建的吗?因为我也遇到了无法仅通过 %{CONTENT_TYPE} 访问它的问题。但再看一遍,文档http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond反正也没提过。

还有其他方法可以覆盖这个 CGI 变量吗?

本地测试服务器:

 Server version: Apache/2.2.14 (Ubuntu)
 mod_php, not fastcgi
 Linux snig 2.6.32-29-generic #58-Ubuntu SMP, 2011 x86_64 GNU/Linux

答案1

这个答案建议一个 Apache 解决方案:

<Location "/backend/XXX.php">
    SetEnvIf Content-Type ^(multipart/form-data)(.*) NEW_CONTENT_TYPE=multipart/form-data-alternate$2 OLD_CONTENT_TYPE=$1$2
    RequestHeader set Content-Type %{NEW_CONTENT_TYPE}e env=NEW_CONTENT_TYPE
</Location> 

相关内容