了解htaccess Filesmatch代码

时间:2013-09-07 17:31:10

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

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

这是一个巨大的痛苦

我认为.htaccess的以下几行是问题所在。当我当前navigatoe到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>

1 个答案:

答案 0 :(得分:7)

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

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

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

例如:

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

表示文件以.engine或.inc或...的其余部分结束,拒绝访问它。

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

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

在这里它反过来,如果文件以一个给定的关键字开头和结尾,它匹配,例如:

如果文件以.开头,后跟任何内容,(.*)表示其他任何内容,例如.htaccess或以Entries开头,后跟任何内容或完全是存储库或。 ..直到最后。

然后是下一个规则^#.*#$,这个意味着该文件的开头和结尾处的##,其处理字面意义为

最后一组规则与第一次验证相同,如果文件以那些给定的扩展名结束。

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