我使用目录匹配规则限制了多个网站的IP部分。现在,我想允许新的IP只能访问其中一个站点。
安全文件夹是一个管理员指南(总是/admin
),一些随机安全文件夹和WordPress管理区域,如果该网站碰巧有博客。他们<Directory ~>
指令如下:
<Directory ~ "^/var/www/vhosts/[^/]+/public/((securefolder1)|(securefolder2)|((blog/)?wp\-)?admin)">
AllowOverride All
Order Deny,Allow
Deny from all
Allow from 111.111.111.111 222.222.222.222 333.333.333.333
</Directory>
我尝试通过在上面的指令之后添加此指令,允许新IP地址到特定的WordPress管理区域:
<Directory "/var/www/vhosts/foo.com/public/wp-admin">
AllowOverride All
Order Deny,Allow
Deny from all
Allow from 111.111.111.111 222.222.222.222 333.333.333.333 444.444.444.444
</Directory>
虽然原始IP仍然有效,但新IP仍然无法查看。我想知道是否与the order they are merged in有关,所以我将<Directory>
更改为<Directory ~>
以获取foo.com指令,但它仍然无法正常工作。我也尝试将其移动到之后另一个指令而没有效果。
如何覆盖此网站的IP限制?
注意: .htaccess
解决方案是可以接受的。
Apache版本为2.2.15
答案 0 :(得分:1)
正如您所怀疑的那样,它有&#34;与他们合并的订单有关。&#34;
按顺序最短的目录组件处理到最长。例如,
<Directory /var/web/dir>
将在<Directory /var/web/dir/subdir>
之前处理。
如果您再看一下这些文档,您会注意到:
合并的顺序是:
<Directory>
(正则表达式除外)和.htaccess
同时完成(.htaccess
如果允许,则覆盖<Directory>
)<DirectoryMatch>
(和<Directory ~>
)<Files>
和<FilesMatch>
同时完成- 醇>
<Location>
和<LocationMatch>
同时完成
foo.com
目录条目创建为目录匹配foo.com
条目比主条目更长。# regex not allowed here, adjust accordingly (three separate directory entries)
<Directory "^/var/www/vhosts/[^/]+/public/((securefolder1)|(securefolder2)|((blog/)?wp\-)?admin)">
AllowOverride All
Order Deny,Allow
Deny from all
Allow from 111.111.111.111 222.222.222.222 333.333.333.333
</Directory>
<Directory ~ "/var/www/vhosts/foo.com/public/wp-admin">
AllowOverride All
Order Deny,Allow
Deny from all
Allow from 111.111.111.111 222.222.222.222 333.333.333.333 444.444.444.444
</Directory>
# This should be reflective of the url
<Location ~ "^/((securefolder1)|(securefolder2)|((blog/)?wp\-)?admin)">
AllowOverride All
Order Deny,Allow
Deny from all
Allow from 111.111.111.111 222.222.222.222 333.333.333.333
</Location>
<Directory "/var/www/vhosts/foo.com/public/wp-admin">
AllowOverride All
Order Deny,Allow
Deny from all
Allow from 111.111.111.111 222.222.222.222 333.333.333.333 444.444.444.444
</Directory>
注意,如果这些是共享服务器,则允许用户编写自己的.htaccess
文件,COULD通过更改URL来覆盖Location指令以访问文件。在这种情况下,唯一剩下的解决方案是先前的<Directory>
示例,或使用VHosts指令。