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 htaccess,允许访问父目录中受限制的子目录中的文件_Apache_.htaccess - Fatal编程技术网

使用apache htaccess,允许访问父目录中受限制的子目录中的文件

使用apache htaccess,允许访问父目录中受限制的子目录中的文件,apache,.htaccess,Apache,.htaccess,鉴于以下结构: /a /a/b 在/a中,我有以下.htaccess: <FilesMatch "\.(php\d?|phpt)$"> Require all denied </FilesMatch> 其目的是,通常不允许访问某些文件类型,但在特定子文件夹中允许访问它们。 然而,父指令似乎优先,我得到了对/a/b/x.php的403响应,即 如何使用.htaccess文件(子目录要求指令优先)?内部/a/b/.htaccess包含要求在父目录中使用的相同文件匹

鉴于以下结构:

/a
/a/b
/a
中,我有以下
.htaccess

<FilesMatch "\.(php\d?|phpt)$">
    Require all denied
</FilesMatch>
其目的是,通常不允许访问某些文件类型,但在特定子文件夹中允许访问它们。 然而,父指令似乎优先,我得到了对
/a/b/x.php
的403响应,即


如何使用.htaccess文件(子目录
要求
指令优先)?

内部
/a/b/.htaccess
包含
要求在父目录中使用的相同
文件匹配
指令中授予的所有
拒绝:

<FilesMatch "\.(php\d?|phpt)$">
   Require all granted
</FilesMatch>

要求所有授权

请注意,您也可以使用:
来匹配所有类型的文件,但这可能会覆盖Apache服务器配置中设置的一些不需要的拒绝。

/a/b/.htaccess
中包含
在父级中使用的相同
FilesMatch
指令中要求所有授予的
,以拒绝:

<FilesMatch "\.(php\d?|phpt)$">
   Require all granted
</FilesMatch>

要求所有授权

请注意,您也可以使用:
来匹配所有类型的文件,但这可能会覆盖Apache服务器配置中设置的一些不需要的拒绝。

在Apache 2.4中,我无法使用子文件夹中的.htaccess使其工作。看起来,尽管httpd-vhosts.conf中的DocumentRoot设置了Allowoverride All,但父文件夹的.htaccess在某种程度上优先于身份验证

我的解决方法是明确允许父文件夹的.htaccess文件中包含我想要的子文件夹:

    AuthName "This website is by invitation only"               
    AuthType Basic
    AuthUserFile "T:/folder-with-your-password-file/.htpasswd"

    Require expr %{REQUEST_URI} =~ m#^/images/public/(.*)$#i
    Require expr %{REQUEST_URI} =~ m#^/.well-known/(.*)$#i  
    Require valid-user
在后一个示例中,我显式地允许任何人访问/images/public/和/.well-known/子文件夹,对于所有其他的,我需要一个基于.htpasswd的经过身份验证的用户

这里
=~m#regexp#
表示正则表达式
regexp
匹配,
i
表示不区分大小写

附言。
在我的例子中,父文件夹是文档根
/
,而.htaccess文件就在那里。

在Apache 2.4中,我无法在子文件夹中使用.htaccess使其工作。看起来,尽管httpd-vhosts.conf中的DocumentRoot设置了Allowoverride All,但父文件夹的.htaccess在某种程度上优先于身份验证

我的解决方法是明确允许父文件夹的.htaccess文件中包含我想要的子文件夹:

    AuthName "This website is by invitation only"               
    AuthType Basic
    AuthUserFile "T:/folder-with-your-password-file/.htpasswd"

    Require expr %{REQUEST_URI} =~ m#^/images/public/(.*)$#i
    Require expr %{REQUEST_URI} =~ m#^/.well-known/(.*)$#i  
    Require valid-user
在后一个示例中,我显式地允许任何人访问/images/public/和/.well-known/子文件夹,对于所有其他的,我需要一个基于.htpasswd的经过身份验证的用户

这里
=~m#regexp#
表示正则表达式
regexp
匹配,
i
表示不区分大小写

附言。
在我的例子中,父文件夹是文档根
/
,而.htaccess文件就存在于此。

谢谢,这部分修复了它,至少向我表明这不是问题的核心:)随着403的持续存在,我意识到对我来说最大的问题是一些中间重写规则。显然,当重写完成时,最后一个(自上而下)
Require
指令适用。所以我必须重新思考整个模型:)谢谢,这部分解决了它,至少向我表明这不是问题的核心:)随着403的继续,我意识到对我来说最大的问题是一些重写规则。显然,当重写完成时,最后一个(自上而下)
Require
指令适用。所以我必须重新思考整个模型:)