Я пытаюсь разобраться с 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]