mod_rewrite: usa referencia inversa de RewriteCond como CondPattern en otra RewriteRule

mod_rewrite: usa referencia inversa de RewriteCond como CondPattern en otra RewriteRule

Intento utilizar la primera parte del fqdn como objetivo de reescritura:

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

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

Esto crea un bucle sin fin. Entonces necesito otra condición que verifique si esta solicitud ya está reescrita o no:

RewriteCond %{REQUEST_URI} !^/%1

Bueno, esto no funciona, la documentación no dice nada sobre el uso de referencias inversas en CondPatterns, lo más probable es que no sea compatible.

RewriteCond %{REQUEST_URI} !^/demo

Esto funciona perfectamente, pero no es dinámico.

Respuesta1

Solución/solución alternativa: reserve una parte del nombre de host para solicitudes 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]

Respuesta2

Si no necesita procesar ninguna regla después de la reescritura, simplemente agregue la opción "L" = "última" entre corchetes:

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

información relacionada