Simulation d’un If-Else à 2 niveaux à l’aide de RewriteCond

J’essaie de me familiariser avec RewriteCond et je souhaite réécrire toutes les requêtes soit sur une page HTML statique (si elle existe), soit sur un index.php spécifique (tant que le fichier demandé n’existe pas).

Pour illustrer la logique:

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 

Je ne semble pas avoir beaucoup de mal à le faire quand je n’ai pas besoin de tester le HTTP_HOST. En fin de compte, ce fichier .htaccess traitera les demandes de plusieurs domaines.

Je sais que je pourrais contourner ce problème avec les vhosts, mais je voudrais savoir comment procéder de cette façon.

Je ne suis pas trop familier avec certains des autres drapeaux, est-ce que certains d’entre eux seront utiles ici (comme la chaîne | C, next | N ou skip | S)?

Merci d’avance!


MISE À JOUR: J’ai réussi à le faire, mais apprécierais des alternatives:

 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] 

MISE À JOUR # 2: Avec l’aide de la réponse de Gumbo, en a trouvé un autre. J’aime le fait que cela nécessiterait moins de maintenance dans le cas des domaines ajoutés. (Merci Gumbo!)

Y a-t-il des raisons pour lesquelles je ne devrais pas définir les variables 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] 

Je le ferais probablement comme ceci:

 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] 

Ceci est similaire à votre exemple mis à jour. Sauf que la première règle ignore les deux règles suivantes si l’hôte n’est pas approprié. Et les modèles RewriteRule excluent tout chemin commençant par /default/static/ . Mais vos règles sont déjà très bonnes.