本文约 2,853 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
几乎每个 WordPress 站长的访问日志里,都躺着一串反复出现的 POST /wp-login.php 记录,来自世界各地的陌生 IP。这不是有人盯着你,而是全网扫描机器人拿固定路径无差别地敲,因为 WordPress 的登录入口地址是公开且固定的。既然门牌号人尽皆知,最省事的一招就是把它改掉——让 wp-login.php 变成 404,脚本敲门时直接扑空,绝大多数无脑自动化攻击也就此止步。修改登录地址不是万能药(定向攻击者仍可能找到新入口),但作为安全加固的一环,它性价比极高:配置简单、几乎不影响正常使用。本文给你插件和手动两种改法,并重点提醒隐藏入口后容易踩的坑。
故障原因分析
- 登录地址是公开固定的。
wp-login.php是全世界的 WordPress 都一样的路径,任何扫描器都不需要探测就知道该往哪打。
- 扫描器无差别运作。攻击者用批量脚本把整段 IP 段里的站点都扫一遍,命中 WordPress 就尝试登录,属于「广撒网」而非精准针对。
- 隐藏入口能显著降低噪声。网站一旦被标记「不含 wp-login.php」,大量自动化工具会直接跳过,把攻击面从「人人可试」缩小到「需要先找到入口」。
- 单纯隐藏并不能杜绝爆破。如果
xmlrpc.php还开着,攻击者可以绕过新登录页照样爆破,所以改地址要配合关闭 XML-RPC 一起做。
- 改法选择不当会锁死自己。手动改核心文件、或改完忘了新地址,都是把管理员挡在门外的常见事故。
分步解决方案
方法一:用 WPS Hide Login 插件改(推荐,最安全)
WPS Hide Login 是专门做这件事的免费插件,改动不动任何核心文件,升级 WordPress 也不会被覆盖:
- 后台「插件 → 安装插件」搜索
WPS Hide Login,安装并启用。 - 进入「设置 → WPS Hide Login」,在
Login URL里填入你自定义的路径,比如my-secret-gate。 - 保存并立刻记下新地址:
https://你的域名/my-secret-gate。 - 换个浏览器标签验证新地址能正常打开登录页,同时确认访问
https://你的域名/wp-login.php已经变成 404。
插件还提供「Redirection URL」选项,可以设置访问旧登录地址时跳到哪个页面(比如首页),避免留下「此处有人」的线索。
方法二:用 .htaccess 规则改写登录地址(进阶)
不想装插件,可以用 Apache 的 .htaccess 重写实现。在网站根目录 .htaccess 顶部、# BEGIN WordPress 之前加入:
<IfModule mod_rewrite.c>
RewriteEngine On
# 将自定义路径映射到真正的登录入口
RewriteRule ^my-secret-gate/?$ /wp-login.php [L]
# 拦截对默认登录页的探测(可选:改跳首页)
RewriteCond %{REQUEST_URI} ^/wp-login\.php$ [NC]
RewriteCond %{QUERY_STRING} !action=logout
RewriteRule ^(.*)$ / [R=404,L]
</IfModule>
改完保存后访问 /my-secret-gate 能出登录页、访问 /wp-login.php 返回 404 即成功。注意规则里排除了 action=logout,否则你自己退登也会 404。
方法三:给登录页再加一道验证码或保护
地址改了不代表高枕无忧,建议双重防护。Wordfence 或 iThemes Security 都能给登录页加验证码;也可以用 .htaccess 给登录路径加一层 HTTP 基本认证(仅限自己固定 IP):
<Files "wp-login.php">
AuthType Basic
AuthName "Restricted"
AuthUserFile /www/wwwroot/yoursite.com/.htpasswd
Require valid-user
</Files>
这样即使有人找到新入口,也要再过一道账号密码验证。
方法四:同步关闭 XML-RPC 这条旁路
隐藏登录页后,务必关闭 xmlrpc.php,否则攻击者仍能通过它批量爆破。在主题 functions.php 里加:
// 关闭 XML-RPC,堵住绕过新登录地址的旁路
add_filter( 'xmlrpc_enabled', '__return_false' );
add_filter( 'wp_headers', function ( $headers ) {
unset( $headers['X-Pingback'] );
return $headers;
} );
或用 .htaccess 直接拒绝访问 xmlrpc.php。
常见踩坑点
- 改完忘了新地址。最常见的翻车点,务必改完立刻记进密码管理器并写进备忘,否则可能把自己锁在门外。
- 新旧地址同时可用。若插件或规则没让旧地址返回 404,等于没藏,扫描器照样能进。
- 只改地址不关 XML-RPC。登录页藏好了,
xmlrpc.php还在替攻击者开门,一定要一起堵。
- 插件冲突导致登录页白屏。某些插件也会 hook 登录流程,改地址后若新地址打不开,先停用其他登录相关插件再排查。
- 缓存的旧页面。CDN 或缓存插件缓存了旧登录页,改完后可能仍能打开旧地址,记得刷新缓存。
- 忘了处理
wp-admin直连。改登录地址不会拦wp-admin,未登录访问会跳转到新登录页,属正常,别误以为没生效。
- 忽略旧地址的收录与书签。旧登录页可能已被搜索引擎收录或被同事收藏,点开就是 404 会让人以为站点故障,稳妥做法是在旧地址做一个 301 跳转到首页,过渡期后再撤掉。
- 多人协作时没通知其他人。改完只自己知道新地址,团队其他管理员全被挡在门外,务必提前把新入口同步给所有需要登录的人。
总结
把 WordPress 默认登录地址从 wp-login.php 改成自定义路径,是成本最低、见效最快的安全加固之一。推荐用 WPS Hide Login 插件实现,不动核心文件、升级无忧;进阶用户也可以用 .htaccess 重写。改完务必确认新地址能登录、旧地址返回 404,并同步关闭 XML-RPC,堵住绕过入口的旁路,再叠加验证码或 IP 保护。改地址不是万能,但能让海量自动化扫描直接跳过你的站。把 WordPress 修改登录地址这件事做对,后台的日常骚扰会明显减少。
