为什么我的apache目录配置被忽略?

为什么我的apache目录配置被忽略?,apache,Apache,我使用目录匹配规则对几个站点的部分进行了IP限制。现在,我想允许一个新的IP只访问其中一个站点 安全文件夹是一个管理目录(总是/admin),一些随机的安全文件夹和WordPress管理区域(如果该站点碰巧有博客)。它们的指令如下所示: <Directory ~ "^/var/www/vhosts/[^/]+/public/((securefolder1)|(securefolder2)|((blog/)?wp\-)?admin)"> AllowOverride All Or

我使用目录匹配规则对几个站点的部分进行了IP限制。现在,我想允许一个新的IP只访问其中一个站点

安全文件夹是一个管理目录(总是
/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

这是一个合并订单问题 正如你所怀疑的,它确实“与它们合并的顺序有关”

按从最短目录组件到最长目录组件的顺序处理。例如,
将在
之前处理

仔细使用Apache合并顺序 如果您再次查看这些文档,您会注意到:

合并的顺序是:

  • (正则表达式除外)和
    .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>