在 Wordpress 中,减少服务器负载的几种有效方法之一是将各个客户端列入白名单/wp-login.php
:/wp-admin/
<Directory /wp-admin>
order deny,allow
deny from all
allow from 10.1.1.50
allow from ...other ips...
</Directory>
但我不想编辑并重新加载 Apache 来更改此列表。在我的虚拟主机中,我想要:
<Directory /wp-admin>
RewriteEngine On
RewriteMap hosts-allow txt:/var/www/html/wp/wp-admin/hosts.allow
RewriteCond ${hosts-allow:%{REMOTE_ADDR}|NOT-FOUND} =NOT-FOUND [AND]
RewriteCond ${hosts-allow:%{REMOTE_HOST}|NOT-FOUND} =NOT-FOUND
RewriteRule ^ - [F]
</Directory>
但:
[root@blah httpd]# service httpd reload
Reloading httpd: not reloading due to configuration syntax error
[FAILED]
[root@blah httpd]# apachectl -S
Syntax error on line 34 of /etc/httpd/sites-enabled/example.org.conf:
RewriteMap not allowed here
那么有没有一种方法可以实现不需要 RewriteMap 的功能,或者我是否需要编写一个新模块?
答案1
创建 .htaccess 文件并将允许的 IP 地址放入其中。不允许在 内使用 RewriteMap Directory
。
答案2
尝试这个:
RewriteMap ipslist txt:/full/path/to/iplist.txt
RewriteCond %{REMOTE_ADDR} ^(.*)$
RewriteCond ${ipslist:%1|black} ^black$ [NC]
RewriteRule (.*) - [F]
你的文件看起来应该是这样的:
192.168.0.12 ok
127.0.0.1 ok
[...]