KakapoWPKakapoWP
登录免费试用
帮助中心/Security/迁移登录地址:设置、检查、还原

迁移登录地址:设置、检查、还原

适用于:Kakapo Security·4 Min. Lesezeit

事先必须满足的条件

出厂状态下该功能是关闭的,而且它绝不会自行开启。有三种情况会完全阻止迁移——此时开关保持锁定,并说明原因:(1) wp-config.php 中写有紧急制动 define( 'KWPSEC_LOGIN_SLUG_OFF', true );。(2) 该安装是一个多站点网络;在那里所有站点共用一个登录入口,迁移必须在整个网络范围内进行。(3) 固定链接设置为“简单”。那样一来,像 /gartentor 这样的路径根本到不了 PHP,Web 服务器会提前返回 404。请先在 设置 › 固定链接 中改成其他结构,然后再继续。

选择一个路径

允许 3 到 40 个字符:小写字母、数字、连字符和下划线。不能有斜杠、不能有变元音、不能有点号;大写字母会被转成小写。保存时会进行四项检查:常见机器人列表上的名称(login、wp-login、admin、wp-admin、anmelden、dashboard 及类似名称)会被拒绝,因为它们几分钟内就会重新被找到。如果 WordPress 安装中已经存在同名的文件或目录,同样会被拒绝——Web 服务器会先把它交付出去,根本轮不到 PHP。像 wp-json、feed、author、category、sitemap 或 favicon 这样的保留路由被禁止使用。如果该路径下已经有一篇文章或一个页面,也会被拒绝,因为之后就再也访问不到它了。已保存的路径还不算生效——只有当您另外把迁移开关打开,它才会起作用。

启用:此时会自动发生什么

拨动开关时,设置会被保存,随后服务器会向本安装发出两次真实的 HTTP 请求:一次请求新地址,一次请求旧地址。每次请求的超时为 8 秒,不跟随重定向,也不携带 Cookie。为了证明确实是登录页作出了响应,会在返回文本中查找 id="loginform" 和 name="log"。如果新地址返回 HTTP 404 且没有登录表单,更改会立即被撤回,并恢复原来的状态——这种情况在 nginx 上通常是缺少 try_files 那一行,在 Apache 上则是缺少 .htaccess。检查通过后,插件会把新地址以纯文本邮件发送到设定的通知地址(否则发送到管理员电子邮件);邮件里也写着用于 wp-config.php 的紧急制动那一行。反馈会毫不粉饰地告诉您 wp_mail() 是否接受了这条消息——如果没有,请您现在就把地址记下来。活动日志中同样会写入一条记录。

运行中会发生哪些变化

在新路径下加载的是原始文件 wp-login.php,而不是重新仿造的——WordPress 的安全更新在那里立即生效。对已退出登录的人来说,/wp-login.php 的表现和任何一个不存在的地址一样:请求会被改写到一个未占用的路径,并由主题完全正常地渲染为 404,不带任何自定义错误提示——自定义提示反倒等于在提醒:这里藏着东西。已登录的人依旧可以通过;这是有意为之。未登录者访问 /wp-admin/ 时,会通过 302 跳转到首页而不是登录页,否则新地址就会出现在 Location 响应头里。admin-ajax.php、admin-post.php、load-styles.php 和 load-scripts.php 仍然可以访问,以便联系表单、购物车和评价继续正常工作。所有由 WordPress 通过 site_url()、network_site_url() 或 wp_redirect() 生成的地址——wp_login_url()、wp_logout_url()、wp_lostpassword_url() 以及表单的 action 属性——都会自动指向新路径。

如果您把自己挡在门外,或者哪里卡住了

第一条路:只要您的浏览器里还有有效的登录 Cookie,您就能照旧访问 /wp-login.php 和 /wp-admin/。第二条路:新地址写在切换时发出的电子邮件里。第三条路:在 wp-config.php 中写入 define( 'KWPSEC_LOGIN_SLUG_OFF', true );——这样 wp-login.php 立刻重新生效,并且开关会保持锁定,直到您删掉这一行。后台另外还有两个按钮:一个用于重新执行检查请求,并输出 HTTP 状态码、响应时间以及旧地址的状态;另一个用于重新发送访问邮件。如果检查请求报的是网络错误而不是 HTTP 状态码,通常是主机商那边封了回环访问——这并不意味着新地址不能用;请您自己访问一次试试。如果某个其他插件的链接仍然指向 wp-login.php,那说明它在那里是写死的,没有走 site_url();只有经过这些过滤器的内容才能被改写。随时可以用同一个开关切换回去。

这篇文章对您有帮助吗?