为什么我的apache目录配置被忽略?
我使用目录匹配规则对几个站点的部分进行了IP限制。现在,我想允许一个新的IP只访问其中一个站点 安全文件夹是一个管理目录(总是为什么我的apache目录配置被忽略?,apache,Apache,我使用目录匹配规则对几个站点的部分进行了IP限制。现在,我想允许一个新的IP只访问其中一个站点 安全文件夹是一个管理目录(总是/admin),一些随机的安全文件夹和WordPress管理区域(如果该站点碰巧有博客)。它们的指令如下所示: <Directory ~ "^/var/www/vhosts/[^/]+/public/((securefolder1)|(securefolder2)|((blog/)?wp\-)?admin)"> AllowOverride All Or
/admin
),一些随机的安全文件夹和WordPress管理区域(如果该站点碰巧有博客)。它们的指令如下所示:
<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>
允许超越所有
命令拒绝,允许
全盘否定
允许从111.111.111.111 222.222.222.222 333.333.333开始
我试图通过在上述指令之后添加此指令来允许新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>
允许超越所有
命令拒绝,允许
全盘否定
允许从111.111.111.111 222.222.222.222 333.333.333 444.444.444开始
虽然原始IP仍能正常工作,但新IP仍无法查看。我想知道这是否与有关,因此我将foo.com指令的
更改为
,但它仍然不起作用。我还试着把它移到另一个指令之后,但没有效果
如何覆盖此站点的IP限制?
注意:.htaccess
如果可能,可以接受解决方案
Apache版本是2.2.15这是一个合并订单问题
正如你所怀疑的,它确实“与它们合并的顺序有关”
按从最短目录组件到最长目录组件的顺序处理。例如,
将在
之前处理
(正则表达式除外)和.htaccess
同时完成(如果允许,使用.htaccess
,覆盖
)
(和
)
和
同时完成
和
同时完成foo.com
目录条目作为目录匹配项foo.com
条目比主条目长#此处不允许正则表达式,请相应调整(三个单独的目录条目)
允许超越所有
命令拒绝,允许
全盘否定
允许从111.111.111.111 222.222.222.222 333.333.333开始
允许超越所有
命令拒绝,允许
全盘否定
允许从111.111.111.111 222.222.222.222 333.333.333 444.444.444开始
改进的解决方案
#这应该是url的反映
允许超越所有
命令拒绝,允许
全盘否定
允许从111.111.111.111 222.222.222.222 333.333.333开始
允许超越所有
命令拒绝,允许
全盘否定
允许从111.111.111.111 222.222.222.222 333.333.333 444.444.444开始
注意,如果这些是共享服务器,则允许用户编写自己的
.htaccess
文件,该文件可以通过更改url来访问文件来覆盖Location指令。在这种情况下,唯一剩下的解决方案是以前的
示例,或者使用VHosts指令。如果您在还是原版的?@Juan是的。我把它放在前后。我也试过用目录
而不是目录
前后。太棒了。我用了你的建议目录
,然后是目录
,效果不错。你的回答有助于更好地理解文档。有趣的是,使这一点更加突出:节中的节应用在虚拟主机定义之外的相应节之后。这允许虚拟主机覆盖主服务器配置。
因此,如果我将任何目录
/目录
放在虚拟主机中而不是httpd.conf
中,则那就行了?当然!唯一的问题是如果有多个vhost,你就必须为每个vhost定义额外的ip访问权限。同样值得注意的是,它与指令相结合。我已经有一段时间没有这么做了,但是你应该能够包含一个定义白名单\u internal 11.11 22.22
的文件,然后包括它和所有现在从${whitelist_internal}
开始,我可能已经非常兴奋了……似乎任何人都可以使用此配置访问/admin
/wp admin
/securefolderX
文件夹。您是否愿意测试配置,或者它是“应该可以工作”的?我没有试图编写您的整个指令,但您是正确的,您不能将regex与该解决方案一起使用。它需要更具体的配置。我将调整我的答案,以便使用位置为您提供解决方案(老实说,我认为这会更容易)
# 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>