Apache RewriteCond: injete uma string no URI entre grupos de correspondência regex

1

EDITAR Isso funciona, necessário para usar% no lugar de $ para grupos de captura:

RewriteRule (.*) http://localhost:8081/%1/%{TIME_YEAR}1101%2 [P]

Ter dificuldade em resolver isso.

Precisa de uma string de data condicionalmente injetada em URIs específicos (para proxy ao servidor de aplicativos Jetty), sendo a condição, se nenhuma string de data com 8 dígitos já estiver presente, injetada.

O hack que eu criei é:

RewriteCond %{REQUEST_URI} ^/(foo|bar|baz)(.*)
RewriteCond %2 !/(\d{8})(.*)
RewriteRule (.*) http://localhost:8081$1/%{TIME_YEAR}1101$2 [P]

Isso funciona em algum grau, mas nem todos em que $ 2 está vazio, $ 1 corresponde a todo o URI.

Basicamente, o que acaba acontecendo é uma solicitação para que /foo/2 seja reescrito em /foo/2/20121101 , enquanto o que eu preciso que aconteça é /foo/20121101/2

Então, dado que $ 1 corresponde a todo o URI, como posso fazer com que ele corresponda apenas a foo | bar | baz, deixando $ 2 como o resto do URI com o qual eu posso colocar a data?

Além disso, esta é uma abordagem horrivelmente ineficiente? Documentos do Apache geralmente indicam encadeamento de [OR] s, então não tenho certeza se o regex direto é o caminho a seguir (certamente mais conciso). No Apache 2.4, na esperança de realmente se beneficiar dos aprimoramentos de velocidade (vs. disparar no pé)

Obrigado

    
por virtualeyes 26.04.2012 / 00:08

1 resposta

1

Se eu entendi o que você está fazendo certo, o que eu não posso, eu diria que pode ser mais simples:

RewriteCond %{REQUEST_URI} !/\d{8}(/|$)
RewriteRule ^/(foo|bar|baz)(/?.*)$ http://localhost:8081/$1/%{TIME_YEAR}1101$2 [P]
    
por 26.04.2012 / 00:23