我曾是尝试去阻止 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>