为此,我们已经尝试了一些在Google上找到的东西,但似乎无法正常工作。
问题所在
我们有一个服务器,上面有大约500个Wordpress网站。我们试图使用全局htaccess将每个实例的所有wp-login.php页面锁定到我们办公室的IP地址 - 但是单个Wordpress htaccess文件正在覆盖这一点。
环境
我们托管在运行 Plesk 的 AWS Linux 服务器上,用于管理每个网站/Wordpress 实例。
问题
有没有办法我们可以在服务器上设置一个htaccess文件来锁定所有Wordpress登录页面,而不会被单个htaccess文件覆盖?
任何帮助或建议,以达到一个好的方法,将不胜感激。
提前致谢
我假设你已经阅读了RewriteOptions指令。 正如我在调试.htaccess重写规则的提示中所解释的那样,正如您在生成自己的.htaccess
文件的WP中发现的那样,默认情况下,将扫描当前路径以查找.htaccess
并应用最低路径中的重写规则,除非较高的规则指定了RewriteOptions Inherit
在这种情况下,在子范围中指定的规则之后执行其规则,这是 WP 访问文件中的第 22 条军规,在其所有执行路径上生成一个 [L]
标志,防止父规则触发。
所以答案是使用Apache机制而不是重写来做到这一点,你可以使用SetEnvif指令:
SetEnvIf Remote_Addr "!^192.168." forbidden
<Files *>
Order allow,deny
Allow from all
Deny from env=forbidden
</Files>
或
SetEnvIf Remote_Addr "!^192.168." forbidden
<Directory /var/www/wproot>
Order allow,deny
Allow from all
Deny from env=forbidden
</Directory>
显然,您需要将正则表达式更改为本地需求,但这应该可以完成业务。 Apache文档对此提供了其他变体,但您应该能够找到适合您的情况的变体。 只需将其放在每个虚拟服务器上下文中 - 如有必要,在 Directory(Match( 指令中 - 或放在公共父目录.htaccess
文件中。
我最终得到了它与您的第一个建议一起工作,但实际上不需要 SetEnvIf 行,所以非常感谢! 这是我在/var/www/vhosts 文件夹中的 .htaccess 供其他需要这个的人使用:
<files wp-login.php>
order deny,allow
deny from all
Allow from xxx.xxx.xxx.xxx
</files>
很好,很简单,与我以前试图采取的路线完全不同。