【问题标题】:Order that apache process rules in htaccess在 htaccess 中订购 apache 进程规则
【发布时间】:2016-02-01 16:46:29
【问题描述】:

我正在工作的这台服务器中有一个非常复杂的目录结构,并且在多级上有很多 htaccess。我知道 apache 会合并来自所有 htaccess 的配置,但这并不像听起来那么容易......

例如,如果靠近根目录的 htaccess 文件使用“Filesmatch”来设置配置,那么如果我尝试在更深目录上的另一个 htaccess 文件中更改相同的配置而不使用“Filesmatch”,则配置不会改变了。我意识到只有使用 Filesmatch ".*" 才能更改它们。

我想我知道为什么:apache 先处理一些东西,然后再处理一些东西,尽管它们被放置在 htaccess 文件中。

所以我想知道这一点:是否有可靠的文档,我可以清楚地看到 apache 先处理什么,然后处理什么?我的意思是,即使在同一个 htaccess 文件中,某些规则“看起来”也不会按照它们在文件中出现的确切顺序起作用,因为某些东西可能以不同的顺序执行。

【问题讨论】:

  • Apache 从上到下检查重写规则。
  • 是的,但是如果您将重写规则与 filesmatch 混合使用,您会发现在某些情况下您会遇到问题,即使您将 rewriterules 放在文件顶部,而 filesmatch 规则放在底部,文件匹配也会首先匹配!
  • 我不知道你为什么要混合使用 filesmatch 和 rewriterule。
  • ...一切都有一个案例用法,如果没有,Apache 可以永久删除文件 filesmatch ...并且仅依赖于 mod_rewirte。
  • FilesMatch 根本不打算与mod_rewrite 一起使用。它旨在与其他指令一起使用,例如AddDefaultCharsetRequire valid-userDefaultLanguage,等等。如果你发现你在重写规则中使用了FilesMatch,那么你可能没有正确地重写。如果您遇到问题,请在新问题中发布您的规则内容,并准确解释问题所在。

标签: php apache .htaccess


【解决方案1】:

向 Apache 社区提出这个问题,他们很容易就给了我答案!在这里:https://httpd.apache.org/docs/2.4/sections.html#merging

配置部分以非常特殊的顺序应用。由于这会对配置指令的解释方式产生重要影响,因此了解其工作原理非常重要。配置部分以非常特殊的顺序应用。由于这会对配置指令的解释方式产生重要影响,因此了解其工作原理非常重要。

合并顺序为:

  • <Directory>(正则表达式除外)和.htaccess 同时完成(使用.htaccess,如果允许,覆盖<Directory>
  • <DirectoryMatch>(和<Directory "~">
  • <Files><FilesMatch> 同时完成
  • <Location><LocationMatch> 同时完成
  • <If>

【讨论】:

  • 另请注意,DirectoryDirectoryMatchLocationLocationMatch 只能在配置文件中使用。只有FilesFilesMatch 可以.htaccess 文件中使用。它将按照指示的顺序结合配置文件和 htaccess 文件中的所有内容。
猜你喜欢
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
相关资源
最近更新 更多