开启Cloudflare Under Attack Mode后,WordPress站点经浏览器检查跳转含cf_chl_managed_tk参数URL时出现全站404错误求助
这个问题很典型——Cloudflare的Under Attack Mode触发的临时验证参数cf_chl_managed_tk,在前台页面被WordPress/Nginx错误处理导致404,但后台因为自带的参数清理机制自动跳转正常。下面是几个逐步排查解决的方案:
WordPress依赖Nginx把所有请求(包括带参数的)转发给index.php处理。如果你的Nginx配置里没有正确传递查询参数,就会导致带cf_chl_managed_tk的URL被当成不存在的静态文件返回404。
打开你的Nginx站点配置文件(通常在/etc/nginx/sites-available/下),找到location /块,确保包含以下规则:
location / { try_files $uri $uri/ /index.php?$args; }
这里的?$args是关键,它会把所有查询参数完整传递给WordPress的入口文件。修改后重启Nginx:sudo systemctl restart nginx,然后测试是否解决问题。
cf_chl_managed_tk参数(模拟后台行为) 后台能正常跳转是因为WordPress的admin区域会自动清理无关参数,我们可以给前台加上同样的逻辑。在你的主题functions.php文件(或者使用自定义代码插件)添加以下代码:
add_action('template_redirect', function() { // 只在前台生效,避免影响后台 if (isset($_GET['cf_chl_managed_tk']) && !is_admin()) { // 移除cf_chl_managed_tk参数后重定向 $clean_url = remove_query_arg('cf_chl_managed_tk', $_SERVER['REQUEST_URI']); wp_redirect(home_url($clean_url), 302); exit; } });
这段代码会在前台检测到该参数时,自动跳转到去掉参数的URL,和后台的处理逻辑一致。用302临时重定向是因为这个参数是Cloudflare临时生成的,不需要永久缓存重定向规则。
如果上面的方法还不行,可以在Cloudflare后台创建一条Page Rule,确保带cf_chl_managed_tk的请求能正确到达源站:
- 登录Cloudflare,进入你的站点管理后台
- 转到「Rules」→「Page Rules」,点击「Create Page Rule」
- URL匹配:输入
*yourwebsite.com/*?cf_chl_managed_tk=*(替换成你的域名) - 设置:添加以下选项:
- 「Cache Level」设置为「Bypass」(避免Cloudflare缓存验证页面)
- 「Browser Integrity Check」设置为「Off」(临时关闭该参数的浏览器检查,不影响全局)
- 保存规则并生效
如果你的站点安装了Wordfence、Sucuri这类安全插件,它们可能会把cf_chl_managed_tk当成恶意参数拦截。进入插件的设置页面,找到「允许的查询参数」或「白名单参数」选项,把cf_chl_managed_tk添加进去。
按这个顺序排查,一般前两步就能解决问题。如果还是不行,可以尝试禁用所有插件测试,看看是否是某个插件的冲突导致的。
内容的提问来源于stack exchange,提问作者user2080866

