mod_rewrite: Use backreference de RewriteCond como CondPattern em outro RewriteRule

mod_rewrite: Use backreference de RewriteCond como CondPattern em outro RewriteRule

Tento usar a primeira parte do fqdn como alvo de reescrita:

http://demo.dev.example.com/something=>http://demo.dev.example.com/demo/something

RewriteCond %{HTTP_HOST} ^([a-z0-9-]+).dev.example.com [NC]
RewriteRule ^/(.*) http://%1.dev.example.com/%1/$1 [P]

Isso cria um loop infinito. Então preciso de outra condição que verifique se essa requisição já foi reescrita ou não:

RewriteCond %{REQUEST_URI} !^/%1

Bem, isso não está funcionando, a documentação não diz nada sobre o uso de referências anteriores em CondPatterns, provavelmente não é suportado.

RewriteCond %{REQUEST_URI} !^/demo

Isso funciona perfeitamente, mas não é dinâmico.

Responder1

Solução/solução alternativa: reserve uma parte do nome do host para solicitações internas:

RewriteCond %{HTTP_HOST} !^internal.dev.atizo.org [NC]
RewriteCond %{HTTP_HOST} ^([0-9a-z-]+).dev.atizo.org [NC]
RewriteRule ^/(.*) http://internal.dev.atizo.org/%1/$1 [P]

Responder2

Se você não precisar processar nenhuma regra após a reescrita, basta adicionar a opção "L" = "last" entre colchetes:

RewriteRule ^/(.*) http://%1.dev.example.com/%1/$1 [P,L]

informação relacionada