mod_rewrite: использовать обратную ссылку из RewriteCond как CondPattern в другом RewriteRule

mod_rewrite: использовать обратную ссылку из RewriteCond как CondPattern в другом RewriteRule

Я пытаюсь использовать первую часть полного доменного имени в качестве цели перезаписи:

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]

Это создает бесконечный цикл. Поэтому мне нужно еще одно условие, которое проверяет, был ли этот запрос уже переписан или нет:

RewriteCond %{REQUEST_URI} !^/%1

Ну, это не работает, в документации ничего не сказано об использовании обратных ссылок в CondPatterns, скорее всего, это не поддерживается.

RewriteCond %{REQUEST_URI} !^/demo

Это работает отлично, но не динамично.

решение1

Решение/обходной путь: зарезервируйте одну часть имени хоста для внутренних запросов:

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]

решение2

Если вам не нужно обрабатывать какие-либо правила после переписывания, просто добавьте опцию «L» = «last» в квадратных скобках:

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

Связанный контент