Apache LocationMatch 正则表达式行为似乎不正确

Que*_*low 4 regex apache-2.4

我正在使用该LocationMatch指令在匹配某些 URL 模式时设置标头:

# 1
# Expected matches: //mysite.com/any-page-with-at-least-a-character-and-no-dot
<LocationMatch "^/[^\.]+$">
  Header set X-Intelligence "STUPID"
</LocationMatch>

# 2
# Expected matches: //mysite.com/ , //mysite.com/main ,  //mysite.com/about
<LocationMatch "^/(|main|about)$">
  Header set X-Intelligence "CLEVER"
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

但是,URL //mysite.com/ 匹配#1 而不是#2。这是一个错误还是我做错了什么?

我什至尝试"^/(main|about)?$"在 #2 中使用正则表达式,但仍然没有爱。

daw*_*wud 7

可以通过使用此配置来解决它:

<VirtualHost 127.0.0.1:80>
   ServerName localhost

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

   <LocationMatch "^/[^\.]+$">
     Header set X-Intelligence "STUPID"
   </LocationMatch>

   <LocationMatch "^/(main|about)$">
     Header set X-Intelligence "CLEVER"
   </LocationMatch>

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这样,以下请求按预期工作:

# curl -I -L http://127.0.0.1/ 2> /dev/null | grep X-I
X-Intelligence: CLEVER

# curl -I -L http://127.0.0.1/foo 2> /dev/null | grep X-I
X-Intelligence: STUPID

# curl -I -L http://127.0.0.1/about 2> /dev/null | grep X-I
X-Intelligence: CLEVER
Run Code Online (Sandbox Code Playgroud)