Apache .htaccess< FilesMatch>//设置为禁止的子文件夹文件

vm0i2vca  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(148)

我都快被Apache .htaccess搞疯了
我试图设置为保护我的子文件夹使用相对地址,但似乎不可能。
Apache文件夹的路径结构如下:

/var/www/apachedir

现在我要保护

/var/www/apachedir/subfolder/*

我尝试在/var/www/apachedir/中放入一个.htaccess文件,如下所示

<FilesMatch "subfolder\/.*">
    Order Allow,Deny
    Deny from all
</FilesMatch>

但似乎效果不太好。
我不想使用ModRewrite,我想使这个.htaccess可重用。
所以,听着,如果我把网站放在另一个服务器上,它有一个类似/var/www/zzz的目录结构,它必须保护/var/www/zzz/subfolder/*中的文件。

此外,文件.htaccess必须位于根文件夹/var/www/apachedir中。

有办法吗?
编辑:我不想使用ModRewrite,但也不想使用Redirectmatch
我想知道是否有办法在没有ModRewriteRedirectmatch的情况下设置FilesMatch

t1qtbnec

t1qtbnec1#

我不想使用ModRewrite
可以使用RedirectMatch阻止对已知路径的访问:

Redirectmatch 403 ^/subfolder/
qxsslcnc

qxsslcnc2#

我想知道是否有办法用FilesMatch设置它
不,因为FilesMatch(和非正则表达式Files)指令只与 files 匹配,而不与目录匹配。例如,<Files "*.jpg">any 子目录中的所有.jpg文件匹配。
有多种方法可以阻止对该子目录的访问...

在服务器配置中使用<Directory>

如果您可以存取服务器(虚拟主机)设定,则可以使用<Directory>(和<DirectoryMatch>)指令来指定特定目录。但.htaccess中不允许这样做。例如:

<Directory "/var/www/apachedir/subfolder">
    Require all denied
</Directory>

在该子目录中创建另一个.htaccess文件

等效的 userland.htaccess方法是在该子目录(即/subfolder/.htaccess)中创建一个额外的.htaccess文件,该文件带有一个Require all denied指令。.htaccess文件本身等效于服务器配置中的<Directory>指令。

  • 旁白:* OrderDenyAllow是Apache 2.2指令,以前在Apache 2.4上被弃用(您更可能使用Apache 2.4)。您应该使用等效的Require(mod_authz_core)指令,如上所述。

使用Redirect 403(mod_alias)-不是“重定向”

我不想使用ModRewrite,但也不想使用Redirectmatch
RedirectMatch(和Redirect)是mod_alias的一部分--这是一个 base 模块,默认情况下编译到Apache中(与mod_rewrite不同),所以使用前缀匹配的Redirect指令(不需要regex变量RedirectMatch)是一个合理的解决方案,正如@anubhava在他的回答中所建议的,这取决于场景和现有的指令。例如:

Redirect 403 /subfolder/

尽管使用了Redirect指令,但这 * 不是 * 外部(HTTP)重定向。403响应是通过内部子请求提供的。

设置环境变量并使用mod_authz_...进行检查。

或者,您可以在请求/subfolder时设置一个环境变量(使用SetEnvIf),并使用Require指令检查此情况。这允许您将条件与实际允许访问的指令分开。例如(使用Apache 2.4 mod_authz_core):

SetEnvIf Request_URI "^/subfolder/" BLOCK_ACCESS
<RequireAll>
    Require all granted
    Require not env BLOCK_ACCESS
</RequireAll>

注意:如果你正在用mod_rewrite进行任何URL重写,那么你可能需要在上面的Require指令中检查REDIRECT_BLOCK_ACCESS

<If>运算式(Apache 2.4)

在Apache 2.4上,您还可以使用<If>表达式,通过包含mod_authz_core指令来定位特定的子文件夹。例如:

<If "%{REQUEST_URI} =~ m#^/subfolder/#">
    Require all denied
</If>

尽管严格地说,这些方法的目标是URL路径,而不是文件路径。

相关问题