Apache HTTP LocationMatch Redirect usando Negative RegEx

1

Estou tentando criar um Redirect usando mod_alias do Apache HTTP Server e core no meu sistema:

# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.1 (Maipo)
# rpm -q httpd
httpd-2.4.6-31.el7_1.1.x86_64
# 

o requisito é redirecionar todas as solicitações, exceto a solicitação para /server-status

# cat /etc/httpd/conf.d/_default.conf 
<VirtualHost *:80>
    ServerName _default_
    <LocationMatch "^/!(server-status)(.*)?">
        Redirect / http://X/
    </LocationMatch>
</VirtualHost>
# 

Acredito que meu problema esteja em algum lugar com a regex, já que estou recebendo 404 independentemente de qual URL eu acesse.

    
por alexus 02.11.2015 / 21:52

1 resposta

1

1 - Você pode fazer isso usando mod rewrite link

<VirtualHost *:80>
    ServerName _default_
    RewriteCond %{REQUEST_URI} !^/server-status
    RewriteRule (.*) http://X$1 [L,R=301]
</VirtualHost>

2 - Para usar o Mod_Alias você precisa do link do RedirectMatch

<VirtualHost *:80>
    ServerName _default_
    RedirectMatch 301 ^/(?!server-status)(.*) http://X/$1
</VirtualHost>

3 - mais infos:

  • depois que a configuração for alterada, o apache precisará ser reiniciado
  • o servidor precisa ser diferente, você terá um loop de redirecionamento

4 - Bônus

(. *) = pega tudo no regexp

$ 1 = resultado var

R = código de status de redirecionamento, aqui você tem a lista:

link

L = flag which mean Por último, aqui você tem os códigos da lista de flags:

link

5 - Ainda mais ... se você realmente quer usar a sintaxe do LocationMatch é:

<VirtualHost *:80>
    ServerName _default_
  <LocationMatch "^/(?!server-status)(.*)">
    Redirect / http://X/
  </LocationMatch>
</VirtualHost>
    
por 02.11.2015 / 23:00