O comportamento de regex do Apache LocationMatch não parece correto

4

Estou usando a diretiva LocationMatch para definir cabeçalhos ao combinar certos padrões de 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>

No entanto, o URL //mysite.com/ corresponde a # 1 em vez de # 2. Isso é um bug ou estou fazendo algo errado?

Eu até tentei usar o regex "^/(main|about)?$" em # 2, mas ainda não tenho amor.

    
por Question Overflow 27.04.2014 / 12:48

1 resposta

5

É possível solucionar isso usando essa configuração:

<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>

Dessa forma, as seguintes solicitações funcionam conforme o esperado:

# 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
    
por 27.04.2014 / 13:22