我有一个运行 WordPress 的站点,该站点在虚拟主机中定义,监听端口 80 ( www.example.com
)。
我想阻止人们访问/wp-admin和wp-login.php但当他们查看不同的端口时允许访问,例如www.example.com:8080/wp-admin
或www.example.com:8080/wp-login.php
我添加了一些 RewriteRules,以便在访问站点的 80 端口时显示 404 错误页面,并为同一站点创建了一个在 8080 端口监听的新虚拟主机,如下所示:
<VirtualHost 192.168.3.20:80>
Options -Indexes +FollowSymlinks
RewriteEngine on
RewriteRule ^/wp-login.php /wp-content/themes/404.html [R=404,NC]
RewriteRule ^/wp-admin$ /wp-content/themes/404.html [R=404,NC]
DocumentRoot /var/www/html/wordpress
ServerName www.example.com
</VirtualHost>
<VirtualHost 192.168.3.20:8080>
DocumentRoot /var/www/html/wordpress
ServerName www.example.com
</VirtualHost>
访问时显示 404 错误/wp-admin和wp-login.php。当通过www.example.com:8080/wp-admin
或访问www.example.com:8080/wp-login.php
时,它会按预期显示登录页面,但在输入凭据并按 Enter 继续后,它会显示在端口 80 处声明的虚拟主机错误 404 页面,这是我不想要的,经过大量测试后我仍然无法避免它。
有人知道如何解决这个问题吗?也许我尝试了错误的方法?
答案1
很遗憾,恐怕您尝试的方法无法在 WordPress 上实现。在您的站点设置中,您定义了 WordPress 所在的 URL --http://www.domain.com/. WordPress 遵循 W3C 规范,始终使用其设置中提供的完整主机名来实现重定向,因此当您登录并验证您的凭据时,它会将您重定向到http://www.domain.com/wp-admin,无论您是从端口 80、端口 8080 还是端口 56348 进入。当我尝试在不同的端口上设置我的 WP 博客的精确镜像以测试主题和插件开发时,我自己也遇到了同样的问题。
要为您网站的管理页面添加额外的安全性,您可以尝试以下几种方法:
- 保持 wp-login.php 页面仅在端口 8080 上可用,但您必须允许在端口 80 上访问 wp-admin。
- 如果我没记错的话,您可以将 WordPress 设置为要求管理部分使用 HTTPS,然后使用 404 规则在端口 80 上阻止它。这与您尝试为试图直接访问 wp-admin 或 wp-login.php 的人实现的效果相同,但是,单击您博客上的站点管理按钮的人很可能会直接进入 HTTPS wp-login.php。
- 结合以上任一方法,您可以使用 Apache HTTP Digest 身份验证(不要使用 Basic)添加额外的密码。这样一来,访问您的 WP 管理员的用户就需要知道(或破解)两个不同的密码。