.htaccess从apache2.2到apache2.4的迁移程序

vkc1a9a2  于 2023-02-16  发布在  Apache
关注(0)|答案(1)|浏览(102)

我试图将我的.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>指令添加这些规则,但是这些指令基本上拒绝了整个站点,并且没有重现相同的结果。

gdrx4gfi

gdrx4gfi1#

我不需要两个变量denyallow,我只需要一个"allow"变量,然后根据需要取消设置(即!allow),而不是设置deny。这个"allow"变量应该在默认情况下设置(与Order deny,allow指令内联,如果两者都没有设置,则将allow * 默认 * 为allow)。
通过只使用一个变量,您可以使用单个Require指令授予访问权限。
为了避免与allow指令混淆,我也将此变量命名为allow以外的其他名称,为了本例的目的,我将其命名为ALLOW_ACCESS(约定要求全部大写)。
因此,规则将变为(SetEnvIf指令几乎相同,除了额外的"初始化"指令和env var的使用):

# Default is to allow access
SetEnvIf ^ ^ ALLOW_ACCESS

#deny access to all files inside folders
SetEnvIf Request_URI "^/.+\.[a-z]+$" !ALLOW_ACCESS

SetEnvIf Request_URI "(\.gitignore|\.htaccess)" !ALLOW_ACCESS

# set acces to public accessible files in main admin folder
SetEnvIf Request_URI "^/admin/(index\.php|tmp)" ALLOW_ACCESS

# 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_ACCESS

# set acces to public accessible files in uploads folder
SetEnvIf Request_URI "^/uploads" ALLOW_ACCESS

SetEnvIf Request_URI "^/(.*\.xml|.*\.pdf|.*\.js|.*\.htm|.*\.asp|.*\.html|favicon\.ico|robots\.txt|index\.php|communicationlog\.png|sitemap-?([a-z]+)?\.xml\.?(gz)?$)" ALLOW_ACCESS

Require env ALLOW_ACCESS

请注意,由于现在只有一个"变量"可以授予访问权限,所以指令的顺序现在很重要,尽管它们碰巧已经处于正确的顺序。
如果您有任何其他(已弃用)OrderAllowDeny指令,则还需要同时转换它们,以避免任何意外冲突。

  • 旁白 *
#deny access to all files inside folders
SetEnvIf Request_URI "^/.+\.[a-z]+$" !ALLOW_ACCESS

SetEnvIf Request_URI "(\.gitignore|\.htaccess)" !ALLOW_ACCESS

看起来这两个指令可以合并:

SetEnvIf Request_URI "\.[a-z]+$" !ALLOW_ACCESS

这有效地阻止了所有的点文件(不仅仅是.gitignore.htaccess),但这通常是可取的。

相关问题