了解htaccess文件匹配代码

7
我正在尝试在我的蓝色主机托管的网站的子目录中安装Drupal...这是一个巨大的痛苦。我认为以下来自.htaccess的行是问题所在。 当我当前导航到mysite.com/subdir/install.php时,我会得到403错误。 但是,当我从下面的行中删除“deny”时,我就不再遇到这个错误了,因此我怀疑此行引起了所有麻烦。
我的问题是,有人能帮我理解以下代码发生了什么吗? 特别是如果您可以按组件分解它。
<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>
1个回答

9

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

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

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

例如:

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

如果文件以.engine或.inc结尾,或者符合其他规则,就拒绝访问。

第一组规则结束时,有一个|,类似于上面的例子,表示,因此如果第一组规则不匹配,它将启动第二组规则,这与第一组规则略有不同。

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

这里的规则与之前相反,它匹配文件是否以给定关键字开头和结尾,例如:

如果文件以.开头,后面跟着任何字符(.*),表示任何其他内容,例如.htaccess或以Entries开头后面跟任意字符或者是正好是Repository等直到结尾。

然后下一个规则^#.*#$,这个规则表示文件以#开头和结尾,#被视为字面上的字符。

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

如果您想了解更多信息,建议您学习有关Perl Compatible Regular Expressions (PCRE)的知识。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接