我正在尝试在我的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>
答案 0 :(得分:7)
FilesMatch
允许您使用正则表达式匹配文件。
在您的上面FilesMatch
上,您有4套正则表达式,其中1套具有辅助可选集。
基本上它正在做的是禁止访问(错误403)找到的正则表达式中描述的任何文件。
例如:
\.(engine|inc ...)$|
表示文件以.engine或.inc或...的其余部分结束,拒绝访问它。
然后在第一组规则的末尾,你有|
,就像上面的例子一样,代表OR
所以如果第一组规则不匹配,它就会启动第二组规则,这有点不同。
^(\..*|Entries.*|Repository)$
在这里它反过来,如果文件以一个给定的关键字开头和结尾,它匹配,例如:
如果文件以.
开头,后跟任何内容,(.*
)表示其他任何内容,例如.htaccess
或以Entries
开头,后跟任何内容或完全是存储库或。 ..直到最后。
然后是下一个规则^#.*#$
,这个意味着该文件的开头和结尾处的#
为#
,其处理字面意义为
最后一组规则与第一次验证相同,如果文件以那些给定的扩展名结束。
如果您想了解更多信息,建议您详细了解Perl Compatible Regular Expressions (PCRE)