WordPress Wordfence 无法创建 wordfence-waf.php 完全解决教程

有个说他的网站装完 Wordfence 之后一直报错,说无法在根目录创建 wordfence-waf.php 文件。我让他截图给我看,报错信息就一行,说文件权限问题。

我寻思了一下,这事儿我之前也遇到过。当时搞了大半天,差点以为是主机商在搞鬼。后来才发现,就是权限和所有者的问题,但主机面板那套逻辑确实很容易把人绕晕。

WordPress Wordfence 无法创建 wordfence-waf.php 完全解决教程

先说清楚这个 wordfence-waf.php 是什么。

它其实就是 Wordfence 防火墙的防护文件,必须写在网站根目录,跟 wp-config.php 同一层级。

没有这个文件,防火墙就启动不了,相当于你装了个锁但钥匙插不进去。

方案1:面板一键修权限(宝塔/HestiaCP/cPanel)

如果你用的是宝塔,其实最简单。网站进去,找到对应站点,点设置,目录权限那块,网站根目录改成 755,所有文件改成 644。然后看看运行用户是不是 www,不是的话切换一下。点个修复权限按钮,等它跑完,刷新 Wordfence 重试就行了。

HestiaCP 的话,你进网站编辑页面,开一个叫 Allow write access to web root 的选项。然后跑几条 SSH 命令,把网站目录的所有者和权限统一一下。

chown -R admin:www-data /home/admin/web/你的域名/public_html
chmod -R 755 /home/admin/web/你的域名/public_html
find /home/admin/web/你的域名/public_html -type f -print0 | xargs -0 chmod 644

cPanel 更直观,文件管理器进去,右上角打开显示隐藏文件,右键目录改权限 755,文件改 644,高级选项里还有个修复文件所有者的功能。

方案2:SSH 手动改权限(通用Linux)

面板搞不定的时候,SSH 手动来。连上服务器,先统一所有者。LNMP/LEMP 环境下,web 运行组一般都是 www-data 或者 www。

chown -R 你的面板用户:www-data /网站根目录完全路径

然后把文件夹权限统一 755,文件统一 644。

find /网站根目录 -type d -print0 | xargs -0 chmod 755
find /网站根目录 -type f -print0 | xargs -0 chmod 644

跑完回到 WP 后台,重新启用防火墙,大概率就好了。

方案3:手动创建 wordfence-waf.php(权限锁死时的杀手锏)

面板 SSH 都改不了的时候,直接手动来。在根目录新建 wordfence-waf.php,把下面这段代码粘进去。

<?php
if (!defined('WFWAF_VERSION')) {
    define('WFWAF_VERSION', '7.11.0');
}
$wafConfig = array(
    'wafAutoPrepend' => true,
    'wafFile' => __FILE__,
    'wpContentDir' => dirname(__FILE__) . '/wp-content',
    'wpPluginsDir' => dirname(__FILE__) . '/wp-content/plugins',
    'wafLogDir' => dirname(__FILE__) . '/wp-content/wflogs',
);
require_once $wafConfig['wpPluginsDir'] . '/wordfence/lib/waf/waf.php';

版本号 7.11.0 记得换成你当前的 Wordfence 版本。文件权限设成 644,所有者跟网站一致。然后编辑 wp-config.php,在文件最顶部加一行。

require_once 'wordfence-waf.php';

保存,刷新 Wordfence,防火墙会自动识别,不再报错。

方案4:检查限制写入的规则

有些时候不是权限的问题,是配置文件在拦着。你打开 .htaccess,把所有 Deny all、限制文件写入、禁止创建 PHP 的规则全删了。Nginx 的话,站点配置里看看有没有 root 路径 read only 或者 create_file off 这种限制,删掉。

还有一种情况,虚拟主机或者轻云主机本身就限制根目录生成 PHP 文件。这种你找主机商解除限制,或者切换 Wordfence 的防护模式。Wordfence 菜单进去,All Options,WAF,防护引擎模式改成 Extended Protection,可以绕开根文件创建。

方案5:插件冲突导致拦截

有些缓存插件或者安全插件会拦截这个操作。临时关掉 WP Rocket、W3 Total Cache、LiteSpeed Cache 这些缓存插件,还有 Sucuri、iThemes Security 这些安全插件。然后清一下服务器缓存和 opcache,重启 PHP 服务。

systemctl restart php8.3-fpm

快速排查顺序(建议按顺序操作)

建议你直接按这个顺序来,省得乱搞一通。先修权限和所有者统一,这是最高概率解决的。不行就重启 PHP-FPM 刷新后台。再不行就手动新建文件改 wp-config。然后检查 Nginx 或 Apache 配置有没有禁止根目录新建 PHP 文件。最后再考虑切换防火墙模式。

有个事必须提醒一下,权限千万别乱设 777。文件夹 755,文件 644,这是标准。设 777 会直接把网站暴露出去,安全风险极高,到时候被入侵了哭都来不及。

说实话我也不确定这些方案对你的情况有没有用,但我已经把我踩过的坑和摸索出来的方法都分享了。你要是还有别的报错信息,截图发给我,我再帮你看看。

Dahil nabasa mo na ito hanggang dito, kung nakatulong ito sa iyo, paki-like at share naman. Kung gusto mo munang makatanggap ng mga update, puwede mo rin akong sundan!

Salamat sa pagbabasa ng aking artikulo. Sa susunod na lang ulit.

发表 评论

Ang iyong email address ay hindi maipa-publish. 必填 项 已 用 * Tatak

Artikulo Direktoryo
Mag-scroll sa Tuktok