
阿里云ESA免费版结合了防火墙和CDN功能,会自动的帮助大家安全使用wordpress,由于是免费版,他会自动把wordpress的/wp-includes/,/wp-includes/列为敏感目录,如果触发了规则,后台的古腾堡编辑器可就洗白了,那么怎么解决这个问题呢?
一、总体解决思想
通过将静态资源路径“伪装”为非敏感路径(如 /static/),从而绕过 ESA 的 WAF 拦截。
二、解决办法
(一)配合WordPress 主题代码(functions.php)
为了让 WordPress 输出的 CSS/JS 链接变成 /static/includes/...,请在当前主题的 functions.php 中添加:
<?php
// 将 wp-includes 和 wp-admin 的静态资源 URL 重写为 /static/ 开头
function safe_static_asset_urls($url) {
$home = home_url('/');
if (strpos($url, $home . 'wp-includes/') === 0) {
return str_replace($home . 'wp-includes/', $home . 'static/includes/', $url);
}
if (strpos($url, $home . 'wp-admin/') === 0) {
return str_replace($home . 'wp-admin/', $home . 'static/admin/', $url);
}
return $url;
}
add_filter('style_loader_src', 'safe_static_asset_urls', 100);
add_filter('script_loader_src', 'safe_static_asset_urls', 100);
?>
某些主题的functions.php文件,请去掉<?php ?>,也就是:
// 将 wp-includes 和 wp-admin 的静态资源 URL 重写为 /static/ 开头
function safe_static_asset_urls($url) {
$home = home_url('/');
if (strpos($url, $home . 'wp-includes/') === 0) {
return str_replace($home . 'wp-includes/', $home . 'static/includes/', $url);
}
if (strpos($url, $home . 'wp-admin/') === 0) {
return str_replace($home . 'wp-admin/', $home . 'static/admin/', $url);
}
return $url;
}
add_filter('style_loader_src', 'safe_static_asset_urls', 100);
add_filter('script_loader_src', 'safe_static_asset_urls', 100);
(二) 以Nginx为例, 配置片段(请添加到您的站点 server 块中)
如果是宝塔,就打开网站--->设置-->配置文件中添加:
# === 绕过 ESA WAF 拦截:代理 wp-includes 静态资源 ===
location ^~ /static/includes/ {
location ~ \.php$ {
deny all;
return 403;
}
alias /www/wwwroot/你网站路径/wp-includes/;
}
# 可选:同样处理 wp-admin 的静态资源(如 common.min.css)
location ^~ /static/admin/ {
location ~ \.php$ {
deny all;
return 403;
}
alias /www/wwwroot/你网站路径/wp-admin/;
}