我正在尝试使用以下代码关闭对 wp-admin 的访问。
是的,如果我访问 example.com/wp-admin,它会起作用,但我会被阻止。但是,如果我以管理员身份登录并输入 example.com/wp-admin/index.php,我仍然可以进入并操作仪表板。
或者,我只需简单地输入 example.com/wp-admin/index.php 就可以从那里登录。
我该如何纠正这个问题,以便完全无法访问 */wp-admin/(whatever)?除了 ajax。
或者,有什么方法可以关闭管理仪表板(例如从 wp 设置等)?
非常感谢你的时间
# Deny brute force access to wp-login.php
location = /wp-login\.php {
limit_req zone=one burst=1 nodelay;
fastcgi_pass unix:/var/run/php7.3-fpm.sock;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Don't cache uris containing the following segments
if ($request_uri ~* "/wp-admin/|/wp-json/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
set $skip_cache 1;
}
# Block wp-admin by IP
location ~* ^/wp-(admin\.php|login\.php|admin/*$|admin/.*\.php) {
deny all;
error_page 403 = @wp_admin_ban;
}
location @wp_admin_ban {
rewrite ^(.*) https://example.com permanent;
}
location /wp-admin/admin-ajax.php {
allow all;
}
答案1
您应该能够调整您的正则表达式:
# Block wp-admin by IP
location ~* ^\/wp-(admin\.php|login\.php|admin\/.*|includes\/.*) {
allow 127.0.0.1; # and other IP's...
include common/acl.conf; # a method to share code between locations for blocking by IP.
deny all;
error_page 403 = @wp_admin_ban;
}
修复了前导斜杠以及 admin/* 和 includes/* 下的通配符。