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]
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
Tags regex date mod-rewrite apache-2.4 uri