我试图将我的.htaccess文件从apache2.2迁移到apache2.4,但是我很难重新创建这些拒绝/允许规则。
#deny access to all files inside folders
SetEnvIf Request_URI "^/.+\.[a-z]+$" deny
SetEnvIf Request_URI "(\.gitignore|\.htaccess)" deny
# set acces to public accessible files in main admin folder
SetEnvIf Request_URI "^/admin/(index\.php|tmp)" allow
# set acces to public accessible files in module folders Admin and Site
SetEnvIf Request_URI "^/modules/[^/]+/(site/([^/]+/)?|admin/)(css|js|plugins|images|files|cache|fonts)/" allow
# set acces to public accessible files in uploads folder
SetEnvIf Request_URI "^/uploads" allow
SetEnvIf Request_URI "^/(.*\.xml|.*\.pdf|.*\.js|.*\.htm|.*\.asp|.*\.html|favicon\.ico|robots\.txt|index\.php|communicationlog\.png|sitemap-?([a-z]+)?\.xml\.?(gz)?$)" allow
Order deny,allow
Deny from env=deny
Allow from env=allow
这些是我目前正在努力解决的规则。用<Require>
、<RequireAll>
和<RequireAny>
指令重新创建这些规则似乎很困难。有人能帮我们吗?
我试着用<RequireAll>
和<RequireAny>
指令添加这些规则,但是这些指令基本上拒绝了整个站点,并且没有重现相同的结果。
1条答案
按热度按时间gdrx4gfi1#
我不需要两个变量
deny
和allow
,我只需要一个"allow"变量,然后根据需要取消设置(即!allow
),而不是设置deny
。这个"allow"变量应该在默认情况下设置(与Order deny,allow
指令内联,如果两者都没有设置,则将allow
* 默认 * 为allow
)。通过只使用一个变量,您可以使用单个
Require
指令授予访问权限。为了避免与
allow
指令混淆,我也将此变量命名为allow
以外的其他名称,为了本例的目的,我将其命名为ALLOW_ACCESS
(约定要求全部大写)。因此,规则将变为(
SetEnvIf
指令几乎相同,除了额外的"初始化"指令和env var的使用):请注意,由于现在只有一个"变量"可以授予访问权限,所以指令的顺序现在很重要,尽管它们碰巧已经处于正确的顺序。
如果您有任何其他(已弃用)
Order
、Allow
和Deny
指令,则还需要同时转换它们,以避免任何意外冲突。看起来这两个指令可以合并:
这有效地阻止了所有的点文件(不仅仅是
.gitignore
和.htaccess
),但这通常是可取的。