Моделирование 2-уровневого При использовании RewriteCond

Я пытаюсь получить голову вокруг 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: Со справкой из ответа Гамбо, придумал другого. Мне нравится этот, это было бы требовать меньшего количества обслуживания в случае добавленных доменов. (Спасибо Гамбо!)

Есть ли какие-либо причины, почему я не должен устанавливать огибающие переменные?

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]
5
задан Henrik L. 14 May 2010 в 20:39
поделиться

1 ответ

Я бы, наверное, сделал это так:

RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$
RewriteRule ^ - [S=2]

RewriteCond %{DOCUMENT_ROOT}/default/static%{REQUEST_URI}.html -f
RewriteRule !^default/static/ default/static%{REQUEST_URI}.html [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^default/static/ default/index.php [L]

Это похоже на ваш обновленный пример. За исключением того, что первое правило пропустит следующие два правила, если хост не подходит. А шаблоны RewriteRule исключают любой путь, который начинается с / default / static / . Но ваши правила уже довольно хороши.

5
ответ дан 14 December 2019 в 19:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: