Apache配置:正则表达式禁用对以点开头的文件/目录的访问

24 regex apache .htaccess

我想禁止访问任何文件OR目录,其名称以DOT开头.我想出了下面的,但它禁止访问与DOT开头,只有当他们是直接在文档根目录的文件/目录.

<Files ~ "^\.|\/\.">
    Order allow,deny
    Deny from all
</Files>
Run Code Online (Sandbox Code Playgroud)

有了这个,

http://my_server.com/.svn/entries   --> Permission denied
http://my_server.com/abcd/.svn/entries  --> Accessible, should be disabled
Run Code Online (Sandbox Code Playgroud)

什么是正确的正则表达式来实现这一目标?

谢谢,

J.P

Lek*_*eyn 53

您的代码不起作用,因为<Files>只适用于基名要求的文件.也就是说,最后一次斜线之后的部分.(来源:http://httpd.apache.org/docs/current/mod/core.html#files)

Apache .htaccess在默认安装中阻止文件(更好:以所有文件开头.ht).如果仔细查看配置文件,您会看到如下内容:

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

因此,要隐藏所有以点开头的文件,您可以使用:

<FilesMatch "^\.">
    Order allow,deny
    Deny from all
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

为了使其适用于以点开头的目录,请使用以下(已测试)代码:

<DirectoryMatch "^\.|\/\.">
    Order allow,deny
    Deny from all
</DirectoryMatch>
Run Code Online (Sandbox Code Playgroud)


Meg*_*lio 18

RewriteRule (^\.|/\.) - [F]
Run Code Online (Sandbox Code Playgroud)

这将拒绝查看以dot开头的任何文件或目录.它会影响路径树中的任何级别.

最后的[F]修饰符表示禁止访问(不需要L修饰符来表示它是应用的最后一条规则,默认情况下是隐含的).

正则表达式有两个部分(任何一个都允许匹配,不需要两者兼有):

(part1|part2)
Run Code Online (Sandbox Code Playgroud)

第一部分匹配从dot开始的任何内容(对于在每个目录.htaccess文件中使用它的情况,在我们匹配的字符串的开头没有斜杠):

^\.
Run Code Online (Sandbox Code Playgroud)

例如,这会为工作.test,.git/HEAD 但不会对工作/.git,path/.hidden.

第二部分匹配包含斜杠后跟点的任何内容.如果您在VirtualHost或侧面Apache配置中有此规则,这很有用,我们匹配的案例字符串可以以斜杠开头.

此规则将匹配:/.git,some/.hidden 此规则将不匹配:.git,.hidden

当我们将这两个规则结合起来时,似乎我们涵盖了所有可能的情况.


小智 8

这对我来说非常有效(Apache 2.4):

<LocationMatch "\/\.">
    Require all denied
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

拒绝任何包含以点开头的组件(文件或目录)的 URL。