【问题标题】:.htaccess deny dot-files but allow letsencrypt.htaccess 拒绝点文件但允许letsencrypt
【发布时间】:2021-10-20 00:34:22
【问题描述】:

我的目标是拒绝访问所有点文件,例如 .htaccess、.env 并发送回 404,但允许访问letsencrypt-folder .well-known

RewriteEngine On
RewriteRule "(^|/)\.(?!well-known)" - [F]
RedirectMatch 404 /\..*$

非常感谢任何有关如何实现此目的的提示 最好的远藤

【问题讨论】:

    标签: regex apache .htaccess redirect url-rewriting


    【解决方案1】:

    请尝试以下方法:

    RewriteEngine On
    
    RewriteRule (?:^|/)\.[^/]+$ - [R=404]
    

    这将为任何以点开头的文件(或者更确切地说,最后一个 URL 路径段)提供 404。但它会允许.well-known/ - 因为这是一个目录,所以也至少有一个斜杠+文件名后缀。

    更新:修改了正则表达式,使其匹配最后一个路径段开头的点,而不是最后一个路径段中的任何位置!

    请注意,F 标志响应的是 403 Forbidden,而不是请求的 404。


    或者,您可以使用仅匹配“文件”的<Files>(或<FilesMatch>)容器。例如:

    <Files ".*">
        # 404 Not Found
        Redirect 404 /
    
        # OR... 403 Forbidden
        #Require all denied
    </Files>
    

    虽然这也阻止了对/.well-known 的请求(没有尾部斜杠)——尽管严格来说这不是一个有效的请求。

    【讨论】:

    • 这是一种相当优雅的方式,谢谢
    • @endo.anaconda 实际上,正则表达式中有一个“错误”,因为它会匹配最后一个路径段中的点 anywhere,而不仅仅是在开头。例如。 /some.thing 也会被屏蔽!我已经更新了我的答案(改进的正则表达式)。我还添加了一个使用 &lt;Files&gt; 容器的替代解决方案。
    猜你喜欢
    • 2016-04-18
    • 2012-04-14
    • 2014-10-23
    • 2016-03-23
    • 2014-09-03
    • 2013-11-27
    • 2014-12-31
    • 2011-07-02
    • 2017-02-20
    相关资源
    最近更新 更多