Назад | Перейти на главную страницу

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

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

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

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

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

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]

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

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