Я пытаюсь разобраться с RewriteCond и хочу переписать любые запросы либо на статическую html-страницу (если она существует), либо на конкретный index.php (пока запрошенный файл не существует).
Чтобы проиллюстрировать логику:
if HTTP_HOST is '(www\.)?mydomain.com'
if file exists: "/default/static/{REQUEST_URI}.html", then
rewrite .* to /default/static/{REQUEST_URI}.html
else if file exists: {REQUEST_FILENAME}, then
do not rewrite
else
rewrite .* to /default/index.php
Кажется, у меня нет особых проблем с этим, когда мне не нужно тестировать HTTP_HOST. В конечном итоге один файл .htaccess будет обрабатывать запросы для нескольких доменов.
Я знаю, что могу обойти это с помощью vhosts, но я хотел бы выяснить, как это сделать таким образом.
Я не очень хорошо знаком с некоторыми другими флагами, будут ли они здесь полезны (например, chain|C, next|N или skip|S)?
Заранее спасибо!
ОБНОВЛЕНИЕ: мне удалось это сделать, но я был бы признателен за альтернативы:
RewriteCond %{HTTP_HOST} ^(domainA|domainB)\..* [NC]
RewriteCond %{DOCUMENT_ROOT}/%1/static/%{REQUEST_URI}.html -f
RewriteRule (.*)? /%1/static/$1.html [NC,L]
RewriteCond %{HTTP_HOST} ^(domainA|domainB)\..* [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /%1/index.php [L,QSA]
ОБНОВЛЕНИЕ № 2: с помощью ответа Гамбо придумал еще один. Мне нравится, что это потребует меньше обслуживания в случае добавления доменов. (Спасибо Гамбо!)
Есть ли причины, по которым я не должен устанавливать переменные ENV?
RewriteCond %{HTTP_HOST} ^(domainA|domainB)\..*$ [NC]
RewriteRule ^ - [E=APP:%1]
RewriteCond %{DOCUMENT_ROOT}/%{ENV:APP}/static/%{REQUEST_URI}.html -f
RewriteRule (.*)? /%{ENV:APP}/static/$1.html [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /%{ENV:APP}/index.php [L,QSA]