3

我正在尝试使用 LocationMatch 在 Apache 中设置一堆基于 url 的规则,而正则表达式的行为方式似乎是我不理解的。
我尝试查找文档,但对我的问题来说,WRT 对我来说不是很清楚……互联网上的其他问题/答案也不是很清楚。

这是我的 Location 指令和我的 LocationMatch 指令结构的通用示例:

<Location />
    Header set X-Intelligence "CatchAll"
</Location>

<LocationMatch "\.(pdf)$">
    Header set X-Intelligence "pdf1"
</LocationMatch>
  • 这些指令都在带有 ssl 的虚拟主机中。
  • 我没有在配置中的其他任何地方使用任何其他 Location 或 LocationMatch 指令。
  • LocationMatch 指令都在我的 CatchAll Location 指令之后。
  • <Location />当我只使用指令时,一切正常。

我注意到这里使用的正则表达式和我使用过的正则表达式之间存在一些差异。

  • 使用开始/结束斜杠似乎不起作用。
  • 使用像 /i /g 这样的结束修饰符标签不起作用。
  • 下面给出的其他行为差异

我尝试了许多不同的方法,但这里有一些我的结果示例:

1.

<LocationMatch "(?i)\.(pdf)$">
    Header set X-Intelligence "pdf1"
</LocationMatch>
  • 以上似乎与所有 .pdf 和 .PDF 扩展 URL 匹配。

然而:

<LocationMatch "\.(pdf)$">
    Header set X-Intelligence "pdf1"
</LocationMatch>
  • 不匹配任何 .pdf 扩展 URL。
  • .pdf 不会被 CatchAll 捕获(显示 404 not found)。
  • .PDF(大写字母)确实被 CatchAll 捕获。

.
2. 不相似:

<LocationMatch "\.(docx?)$">
    Header set X-Intelligence "doc2"
</LocationMatch>
  • 以上匹配我的 .docx URL。

然而:

<LocationMatch "\.(doc)$">
    Header set X-Intelligence "doc2"
</LocationMatch>

<LocationMatch "\.(docx)$">
    Header set X-Intelligence "doc22"
</LocationMatch>
  • 以上内容与 .docx URL 不匹配。
  • 不会被 CatchAll 捕获(未找到 404)。
  • 我尝试重新排列顺序,但仍然给出相同的结果。

不知道发生了什么,但行为完全不是我所期望的。
有人对我可能做错了什么或我不理解的事情有任何想法吗?

接受任何建议以使这个问题变得更好。谢谢。

4

0 回答 0