我都快被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
。
我想知道是否有办法在没有ModRewrite
或Redirectmatch
的情况下设置FilesMatch
。
2条答案
按热度按时间t1qtbnec1#
我不想使用
ModRewrite
。可以使用
RedirectMatch
阻止对已知路径的访问:qxsslcnc2#
我想知道是否有办法用
FilesMatch
设置它不,因为
FilesMatch
(和非正则表达式Files
)指令只与 files 匹配,而不与目录匹配。例如,<Files "*.jpg">
与 any 子目录中的所有.jpg
文件匹配。有多种方法可以阻止对该子目录的访问...
在服务器配置中使用
<Directory>
节如果您可以存取服务器(虚拟主机)设定,则可以使用
<Directory>
(和<DirectoryMatch>
)指令来指定特定目录。但.htaccess
中不允许这样做。例如:在该子目录中创建另一个
.htaccess
文件等效的 userland
.htaccess
方法是在该子目录(即/subfolder/.htaccess
)中创建一个额外的.htaccess
文件,该文件带有一个Require all denied
指令。.htaccess
文件本身等效于服务器配置中的<Directory>
指令。Order
、Deny
和Allow
是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
指令,但这 * 不是 * 外部(HTTP)重定向。403响应是通过内部子请求提供的。设置环境变量并使用mod_authz_...进行检查。
或者,您可以在请求
/subfolder
时设置一个环境变量(使用SetEnvIf
),并使用Require
指令检查此情况。这允许您将条件与实际允许访问的指令分开。例如(使用Apache 2.4 mod_authz_core):注意:如果你正在用mod_rewrite进行任何URL重写,那么你可能需要在上面的
Require
指令中检查REDIRECT_BLOCK_ACCESS
。<If>
运算式(Apache 2.4)在Apache 2.4上,您还可以使用
<If>
表达式,通过包含mod_authz_core指令来定位特定的子文件夹。例如:尽管严格地说,这些方法的目标是URL路径,而不是文件路径。