了解htaccess Filesmatch代码

Sim*_*Pro 4 apache .htaccess drupal subdirectory http-status-code-403

我想在我的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>
Run Code Online (Sandbox Code Playgroud)

Pri*_*rix 7

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

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

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

例如:

\.(engine|inc ...)$|
Run Code Online (Sandbox Code Playgroud)

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

然后在第一组规则的最后,你有一个|像上面的例子,代表OR如果第一组规则不匹配,它开始第二组,这是略有不同.

^(\..*|Entries.*|Repository)$
Run Code Online (Sandbox Code Playgroud)

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

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

那么接下来的规则^#.*#$,这意味着一个文件开始,以结束#作为#它的字面处理

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

如果您想了解更多信息,我建议您了解有关Perl兼容正则表达式(PCRE)的更多信息