.htaccess 可以根据 {HTTP:Content-Length} 执行不同的操作吗?

.htaccess 可以根据 {HTTP:Content-Length} 执行不同的操作吗?

我有一个服务器,它接受来自第三方的 HTTP POST,然后返回 200 或 500。

第三方不受我的控制,有时会发送非常大的帖子,例如 40MB。

这些 POST 导致我的 PHP 代码内存耗尽,我无法捕获此情况,因此 apache 发送了 500。

API 会永远重试该 POST,并且不会发送新数据,因此这是一个问题。

我尝试过各种各样的方法,但最终想到,如果我可以让 .htaccess 只返回 200 而不执行任何其他操作,如果 content_length > X,那么这至少可以为我赢得时间来重构它的工作原理。

所以…

是否可以在 .htaccess 中编写一条规则,使得如果 content_length > X,则返回 200?

答案1

我不喜欢在事情不顺利时假装“一切正常”。根据您的环境,您可能有多种方法:

  1. 增加 PHP 通常使用的内存(php_value memory_limit 100M.htaccess或类似php.ini
  2. 增加 PHP 仅对此客户端使用的内存。尝试以下操作(未经测试,192.168.1.0/24是远程系统的地址):

    <If "-R '192.168.1.0/24'">
          php_value memory_limit 100M
    </If>
    
  3. 如果其他方法都失败了,就使用你的想法,如下所示:

    RewriteCond %{HTTP:Content-Length} -ge 200000 
    RewriteRule ^ - [R=200]
    

    这也是未经测试的,不太可能按原样工作,但它的核心是RewriteCond %{HTTP:Content-Length}部分。

相关内容