mod_rewrite: Rückreferenz von RewriteCond als CondPattern in einer anderen RewriteRule verwenden

mod_rewrite: Rückreferenz von RewriteCond als CondPattern in einer anderen RewriteRule verwenden

Ich versuche, den ersten Teil des FQDN als Umschreibziel zu verwenden:

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

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

Dadurch entsteht eine Endlosschleife. Ich brauche also eine weitere Bedingung, die prüft, ob diese Anfrage bereits umgeschrieben wurde oder nicht:

RewriteCond %{REQUEST_URI} !^/%1

Nun, das funktioniert nicht, in der Dokumentation steht nichts über die Verwendung von Rückreferenzen in CondPatterns, höchstwahrscheinlich wird es nicht unterstützt.

RewriteCond %{REQUEST_URI} !^/demo

Dies funktioniert einwandfrei, ist aber nicht dynamisch.

Antwort1

Lösung/Workaround: Reservieren Sie einen Hostnamenteil für interne Anfragen:

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]

Antwort2

Wenn Sie nach dem Umschreiben keine Regeln verarbeiten müssen, fügen Sie einfach die Option „L“ = „last“ in die eckigen Klammern ein:

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

verwandte Informationen