我创建了一个流行的 Wordpress 插件,但我收到很多抱怨它不起作用。在登录到许多用户的 WP 网站后(在询问管理员密码后),我注意到我无法轻易解决的最后一个问题是 mod_security 和 mod_security2 阻止了一些 AJAX 请求或 .htaccess,这在某些配置上导致 500 错误。
所以首先为什么这段代码会导致一些服务器返回 500 错误
<IfModule mod_security2.c>
SecRuleRemoveById 300015
SecRuleRemoveById 300016
SecRuleRemoveById 300017
SecRuleRemoveById 950907
SecRuleRemoveById 950005
SecRuleRemoveById 950006
SecRuleRemoveById 960008
SecRuleRemoveById 960011
SecRuleRemoveById 960904
SecRuleRemoveById phpids-17
SecRuleRemoveById phpids-20
SecRuleRemoveById phpids-21
SecRuleRemoveById phpids-30
SecRuleRemoveById phpids-61
在其他服务器上通过 id 删除规则会导致 500 错误:
<IfModule mod_security.c>
SecRuleRemoveById 300015
...
SecRuleRemoveById phpids-61
</IfModule>
所以现在唯一不会导致任何服务器崩溃的工作是
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
但是对于带有 mod_security2 的服务器来说还不够!
如何编写跨服务器 .htaccess 文件,以及我应该添加哪些 IF 条件来禁用 mod_security 和 mod_security2 在任何适用的地方并且不会在其他配置上导致 500 错误?
编辑:不仅在 Apache 中。使用 .htaccess 的任何地方。