Я все время пытался понять это. Прошу прощения, если это повторяющийся вопрос, но я не могу найти подходящее решение.Apache Mod_rewrite для изменения каталогов
То, что я пытаюсь выполнить следующие действия:
Учитывая URL dev-<sub>.example.com/resources/path/to/resource
, где sub
меняется, перейдите к /var/www/devEx_<sub>/override/resources/path/to/resource
, если он дает файл или /var/www/devEx_<sub>/main/resources/path/to/resource
в противном случае (я могу справиться с 404-х).
Я могу найти решение, в котором я вручную добавляю каждого человека sub
, но я не могу понять, как это сделать с помощью подстановочного знака или обратной ссылки.
Я пробовал общаться с VirtualDocumentRoot
, но я никогда не смогу получить часть devEx_<sub>
для отображения в DOCUMENT_ROOT
для проверки ресурса.
Я попытался использовать решение, подобное этому [mod_rewrite regex (too many redirects)], но оно всегда беспорядочно с REQUEST_URI
.
Я пытался использовать что-то подобное в прошлом:
RewriteCond $1 (^resources/.*)
RewriteCond %{DOCUMENT_ROOT}/override%{REQUEST_URI} -f
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/override%{REQUEST_URI} [QSA,L]
RewriteCond $1 (^resources/.*)
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/main%{REQUEST_URI} [QSA,L]
Кроме того, я бы очень хотелось, чтобы понять, используя Apache/mod_rewrite более, если у вас есть предложения для хорошего технического руководства или учебника, который помогли бы мне с этим или некоторыми методами отладки (поскольку я не знаю, как отлаживать эти правила перезаписи), я бы очень признателен за знание, поэтому, пожалуйста, поделитесь!
EDIT
Некоторые подробности о моих исследованиях.
В моем решении VirtualDocumentRoot
я смог перейти в нужный каталог, но не смог установить каталог в качестве корня документа для выполнения правил переопределения.
Для этого решения [mod_rewrite regex (too many redirects)], я поставил DocumentRoot
в конф быть /var/www
и помещены следующие строки в .htaccess
файл в каталоге
RewriteCond %{HTTP_HOST} ^dev-([^.]+)\.example\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/devEx_%1 -d
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule .* /devEx_%1/$0 [L]
Однако это добавляется devEx_<sub>
к %{REQUEST_URI}
, а вы ожидаете.
Эти правила, похоже, находятся в правильном направлении - разве они не работают? – Ansari
Не хотите ли '% {DOCUMENT_ROOT}/path1% {REQUEST_URI}' быть '% {DOCUMENT_ROOT}/переопределить% {REQUEST_URI}'? –
@Jon Отредактирована ошибка в переводе. – sgcharlie