这个错误困扰了我很长时间。 在WordPress中,更新或保存新帖子或现有帖子后,有时,它将重定向到404页面,并且这种情况是随机发生的,不知道是什么原因引起的。
阅读后几个类似的职位- 这个和这个 ,我发现这是由于mod_security
滤波装在Apache上-如果一个帖子包含一定的预先定义的危险“二字组合”喜欢“高管”或“SQL注入命令”喜欢“插”,该帖子将被过滤,WordPress仅返回404页面。
这是我的解决方案:
1.禁用mod_security
许多建议通过将以下规则放在.htaccess
禁用mod_security
模块。
#...
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterPost Off
</IfModule>
<IfModule mod_env.c>
SetEnv MODSEC_ENABLE Off
PassEnv MODSEC_ENABLE
</IfModule>
#...
不幸的是,上述解决方案不适用于我。 深入httpd.conf
,发现我的Apache正在使用最新的mod_secuirty2
,然后再次尝试遵循以下规则:
#...
<IfModule mod_sec2.c>
SecFilterEngine Off
SecFilterPost Off
</IfModule>
#...
但是,也不起作用。 你可以试试运气🙂
2.绕过mod_security规则
谷歌搜索后,发现“ mod_security 2
”不再支持.htaccess
覆盖,您需要通过配置文件手动绕过那些规则。
要对其进行修复,请找到' /usr/local/apache/conf/modsec2/exclude.conf
,然后在文件开头附加以下内容。
<locationmatch "/wp-admin/post.php">
SecRuleRemoveById 300013
SecRuleRemoveById 300015
SecRuleRemoveById 300016
SecRuleRemoveById 300017
</locationmatch>
WordPress使用/wp-admin/post.php
更新帖子,现在, mod_security
将绕过规则– 300013、300015、300016、300017。重新启动Apache服务器。 再次更新以前的问题帖子,现在已成功更新,不再需要重定向到404页面,就可以了!
注意
您也可以将忽略规则放在/usr/local/apache/conf/modsec2/whitelist.conf
。
3.要过滤哪个规则ID?
等等,我们如何知道要过滤的规则? 您可以在modsec_audit.log
找到此信息–所有过滤或拦截的URL都将记录在此文件中。
# your problem-post URL here...
--2950df1e-H--
Message: Access denied with code 500 (phase 2). Pattern match "((select|grant|delete|insert|drop|alter|replace|truncate|update|create|rename|describe)[[:space:]]+[A-Z|a-z|0-9|\
\*| |\\,]+[[:space:]]+(from|into|table|database|index|view)[[:space:]]+
[A-Z|a-z|0-9|\\*| |\\,]|UNION SELECT.*\\'.*\\'.*,[0-9].*INTO.*FROM)" at REQUEST_BODY.
[file "/usr/local/apache/conf/modsec2.user.conf"] [line "345"] [id "300013"] [rev "1"]
[msg "Generic SQL injection protection"] [severity "CRITICAL"]
Action: Intercepted (phase 2)
#...
按URL或IP过滤,以标识更新帖子时触发哪些规则。 在上述情况下,帖子的URL 符合规则“ 300013 ”,并且您需要绕过此规则ID才能更新帖子。
注意
检查您的http.conf
,mod_security
日志可能已将错误消息记录到其他地方,请向托管服务提供商咨询以获取详细信息。
参考文献
- 使用事务变量而不是SecRuleRemoveById
- 编辑更新帖子后出现404错误
- 点击更新页面会显示404
- 发布或保存帖子时出现WordPress错误404
- WordPress Mod安全性2
- WordPress上的怪异500内部服务器错误已解决
翻译自: https://mkyong.com/blog/wordpress-display-404-after-updated-post/