【问题标题】:Understanding htaccess Filesmatch code了解 htaccess 文件匹配代码
【发布时间】:2013-09-11 15:07:49
【问题描述】:

我正在尝试在我的 bluehost 托管网站的子目录中安装 drupal...

这是一个巨大的痛苦

我认为 .htaccess 中的以下几行是问题所在。当我当前导航到 mysite.com/subdir/install.php 时,我收到 403 错误。但是,当我从下面的行中取出“拒绝”时,我不再收到那个错误,所以我怀疑这条线造成了所有的麻烦。

我的问题是,有人可以帮助我理解以下代码中发生了什么吗?特别是如果您可以按组件分解它。

<FilesMatch "\.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)(|~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig\.save)$">
      Order allow,deny
    </FilesMatch>

【问题讨论】:

    标签: apache .htaccess drupal http-status-code-403 subdirectory


    【解决方案1】:

    FilesMatch 允许您使用正则表达式匹配文件。

    在您上面的FilesMatch 上,您有 4 组正则表达式,其中 1 组有一个辅助可选集。

    基本上,它所做的是禁止访问(错误 403)在您的正则表达式集上找到的任何文件。

    例如:

    \.(engine|inc ...)$|
    

    表示如果文件以 .engine 或 .inc 或 ... 规则的其余部分结尾,则拒绝访问它。

    然后在第一组规则的末尾你有一个|,就像上面的例子一样,代表OR,所以如果第一组规则不匹配,它会启动第二个规则,这是轻微的不同。

    ^(\..*|Entries.*|Repository)$
    

    这里正好相反,如果文件以给定关键字开始和结束,则匹配,例如:

    如果文件以 . 开头,后跟任何内容,则 (.*) 表示其他任何内容,例如 .htaccess 或以 Entries 开头,后跟任何内容,或者恰好是 Repository 或 ... 直到最后。

    然后是下一条规则^#.*#$,这意味着文件以# 开头和结尾,因为# 是按字面意思处理的

    最后一组规则与第一组规则相同,验证文件是否以给定的扩展名结尾。

    如果您想了解更多,建议您了解更多关于Perl Compatible Regular Expressions (PCRE)的信息

    【讨论】:

      猜你喜欢
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多