Próbuję uzyskać przewagę nad RewriteCond i chcę przepisać dowolne żądania na statyczną stronę html (jeśli istnieje) lub na określony index.php (o ile żądany plik nie istnieje).Symulowanie 2-poziomowego If-Else przy użyciu RewriteCond
Aby zilustrować logicznych:
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
nie wydają się mieć wiele kłopotów robi to, kiedy nie trzeba przetestować na HTTP_HOST. Docelowo ten jeden plik .htaccess będzie obsługiwał żądania dla kilku domen.
Wiem, że mógłbym obejść to z vhostami, ale chciałbym wymyślić, jak to zrobić w ten sposób.
Nie jestem zbyt obeznany z niektórymi innymi flagami, czy którekolwiek z nich będzie użyteczne tutaj (jak łańcuch | C, następny | N czy pominięcie | S)?
Z góry dziękuję!
UPDATE: Udało mi się to zrobić, ale chciałbym docenić możliwości:
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]
Aktualizacja # 2: Z pomocą odpowiedź gumbo, w wymyślił inny. Podoba mi się, że wymagałoby to mniej konserwacji w przypadku dodanych domen. (Dzięki Gumbo!)
Czy są jakieś powody, dla których nie powinienem ustawiać zmiennych 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]
Dzięki! Chociaż wiedziałem o tym, nie znałem składni reguły bez przepisywania. To dało mi pomysł na inne rozwiązanie, które okazało się dokładnie tym, czego chciałem (zaktualizowałem oryginalny wpis). Dzięki jeszcze raz! –