Apache 的 .htaccess 语法中 [F] (即禁止)的反义词是什么?

Apache 的 .htaccess 语法中 [F] (即禁止)的反义词是什么?

我有一条应用于 Apache 的 httpd.conf 配置的规则,如下所示:

<DirectoryMatch "^/.*/\..*/">
    Order deny,allow    
    Deny from all
</DirectoryMatch>

它阻止访问我们 webroot 中的隐藏目录(例如 .git)。但是,我们使用的 Web 应用程序 (Magento) 使用媒体目录中需要公开访问的 .thumbs 子目录。

我有一条在 .htaccess 中有效的规则,明确禁止访问隐藏目录:

RewriteRule (^\.|/\.) - [F]

但我似乎找不到允许上述版本。

背景:我们不修改 Apache httpd.conf 配置文件的原因是我们希望仅通过基于代码的部署来解决这个问题,并避免在每个生命周期环境中重新加载 Web 服务器的配置。

答案1

...不修改 Apachehttpd.conf配置文件

总结将以下内容添加到.htaccess您想要允许访问的目录中的文件中,即/media/.thumbs/.htaccess

<Files "*">
    Order deny,allow    
    Allow from all
</Files>

[F] 的反义词是什么(即禁止)...

您似乎问错了问题。您需要 (mod_authz_host) 的反面Deny- 您需要覆盖它。(但是,处理指令的顺序还有进一步的复杂性,因此请继续阅读...)

在旁边:F标志是 mod_rewrite 发送 403 Forbidden 响应的方式,实际上并没有对面的除了避免发送 403 Forbidden 之外,其他方法都行!如果请求已被 mod_authz_host 阻止(即Deny),则无法使用 mod_rewrite“撤消”此操作。)

相反的Deny操作Allow在 mod_authz_host 中。例如,在/media/.thumbs/.htaccess文件中,您可以执行以下操作:

Order deny,allow    
Allow from all

但是,这不会覆盖<DirectoryMatch>服务器配置中的容器,因为<DirectoryMatch>容器被处理 .htaccess。但是,如果您<Directory>在服务器配置中使用了(非正则表达式)容器,而不是<DirectoryMatch>,那么这将覆盖服务器配置,因为<Directory>容器和.htaccess同时使用.htaccess覆盖<Directory>容器。

不过,你仍然可以允许访问所有文件/media/.thumbs通过将上述Allow指令包装在<Files>容器中(在同一个文件中)在子目录中执行.htaccess此操作。例如:

<Files "*">
    Order deny,allow    
    Allow from all
</Files>

通过将这些指令包装在<Files>容器中,您可以改变处理的顺序。至关重要的是,<Files>容器的处理 <DirectoryMatch>容器(尽管它出现在文件中.htaccess),所以现在它会覆盖<DirectoryMatch>服务器配置中的容器。

Apache 2.2 文档中有关如何合并部分的内容

合并的顺序为:

  1. <Directory>(正则表达式除外)并.htaccess同时完成(如果允许,使用 .htaccess 覆盖<Directory>
  2. <DirectoryMatch>(和<Directory ~>
  3. <Files><FilesMatch>同时完成
  4. <Location><LocationMatch>同时完成

答案2

1º 不要使用 .htaccess

2º 在实际模式之前添加正则表达式“负向前瞻”以做出例外:

<DirectoryMatch ^/(?!\.thumbs).*/\..*/>
    Order deny,allow    
    Deny from all
</DirectoryMatch>

答案3

您可以尝试以下操作:

RewriteCond %{REQUEST_FILENAME} !"path to.thumbs sub-directory"
RewriteRule (^\.|/\.) - [F]

阻止除指定文件夹之外的所有文件夹的访问。

相关内容