Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在apache 2.4中将子文件夹的ip和用户身份验证限制结合起来_Apache_.htaccess_Authentication_Apache2.4 - Fatal编程技术网

在apache 2.4中将子文件夹的ip和用户身份验证限制结合起来

在apache 2.4中将子文件夹的ip和用户身份验证限制结合起来,apache,.htaccess,authentication,apache2.4,Apache,.htaccess,Authentication,Apache2.4,我想限制某些IP访问完整的网站(apache 2.4)。最重要的是,我想通过用户身份验证限制对某些子文件夹的访问。用户身份验证不起作用。以下是我得到的: 在vhost配置中,我有 <Location /> # Localhost Require ip 127.0.0.1i # some other IP Require ip 1.2.3.4 <Location> #本地主机 要求ip 127.0.0.1i #其他知识产权 要求ip 1.

我想限制某些IP访问完整的网站(apache 2.4)。最重要的是,我想通过用户身份验证限制对某些子文件夹的访问。用户身份验证不起作用。以下是我得到的:

在vhost配置中,我有

<Location />
    # Localhost
    Require ip 127.0.0.1i
    # some other IP
    Require ip 1.2.3.4
<Location>

#本地主机
要求ip 127.0.0.1i
#其他知识产权
要求ip 1.2.3.4
现在,我希望子文件夹/secure/需要有效的用户登录

/secure/.htaccess
看起来像

<RequireAll>
    Require all granted
    Require user user1 user2 user3
    AuthBasicProvider file
    AuthType Basic
    AuthName "Secure Folder Login"
    AuthUserFile /securePath/userAuth
</RequireAll>

要求所有授权
需要用户user1 user2 user3
AuthBasicProvider文件
AuthType Basic
AuthName“安全文件夹登录”
AuthUserFile/securePath/userAuth
我仍然可以从IP 1.2.3.4访问/保护,无需用户身份验证。感觉apache与IP相匹配,
要求IP 1.2.3.4
指令(内部隐式ID
RequireAny
),并且不关心后续可能出现的额外限制。

至少是位置(位置外、目录、文件和.htaccess指令)似乎是单独评估的,最后一次,并以与外观相反的顺序进行评估。我没有完全检查,也找不到上面的文档

长话短说

我可以通过放置

<Location /secure/>
    Require all denied
    <RequireAll>
        Require user user1 user2 user3
        AuthBasicProvider file
        AuthType Basic
        AuthName "Secure Folder Login"
        AuthUserFile /securePath/userAuth
    </RequireAll>
</Location>

要求全部拒绝
需要用户user1 user2 user3
AuthBasicProvider文件
AuthType Basic
AuthName“安全文件夹登录”
AuthUserFile/securePath/userAuth

下面vhost配置中的
需要ip 1.2.3.4
(上面不起作用)。使用
阻止或
.htaccess
无效。

如果您希望阻止任何IP,但只阻止列表中的IP,并为允许的IP提供基本登录提示,您可以执行以下操作(在.htaccess内):

要求全部拒绝
需要有效用户
要求ip 100.04.04.04
AuthBasicProvider文件
AuthType Basic
AuthName“安全文件夹登录”
AuthUserFile/htdocs/www/web\u projects/.htpasswd
对于多个IP,类似于以下内容的操作应该有效:

Require all denied    
<RequireAll>
    <RequireAny>
        Require ip 78.53.160.0/19
        Require ip 80.171.1.0/24
        Require ip 80.171.2.0/23
        Require ip 80.171.4.0/22
        Require ip 80.171.8.0/21
        Require ip 80.171.16.0/20
        Require ip 80.171.32.0/19
        Require ip 80.171.64.0/18
    </RequireAny>
    <RequireAll>
        Require valid-user
        AuthBasicProvider file
        AuthType Basic
        AuthName "Secure Folder Login"
        AuthUserFile /htdocs/www/web_projects/.htpasswd
    </RequireAll>
</RequireAll>
要求全部拒绝
要求ip 78.53.160.0/19
要求ip 80.171.1.0/24
要求ip 80.171.2.0/23
要求ip 80.171.4.0/22
要求ip 80.171.8.0/21
要求ip 80.171.16.0/20
要求ip 80.171.32.0/19
要求ip 80.171.64.0/18
需要有效用户
AuthBasicProvider文件
AuthType Basic
AuthName“安全文件夹登录”
AuthUserFile/htdocs/www/web\u projects/.htpasswd

出于某种原因,这也会在ip匹配时忽略身份验证。这里是-如果您的服务器启用了
mod\u access\u compat
,您可以使用旧的Apache语法使其按预期工作。链接中的代码进行了
IfModule
检查,以便当模块不存在时,它将恢复到较新的语法和忽略身份验证的行为。不幸的是,我们还没有找到最终的答案。
Require all denied    
<RequireAll>
    <RequireAny>
        Require ip 78.53.160.0/19
        Require ip 80.171.1.0/24
        Require ip 80.171.2.0/23
        Require ip 80.171.4.0/22
        Require ip 80.171.8.0/21
        Require ip 80.171.16.0/20
        Require ip 80.171.32.0/19
        Require ip 80.171.64.0/18
    </RequireAny>
    <RequireAll>
        Require valid-user
        AuthBasicProvider file
        AuthType Basic
        AuthName "Secure Folder Login"
        AuthUserFile /htdocs/www/web_projects/.htpasswd
    </RequireAll>
</RequireAll>