I'm lost. My Rewrite Rule does work fine till the moment that I place it within an <If>-block.
When I search here for answers, via google, and via ChatGPT, I do get a mixed image of whether this is possible at all, or not.
Anyone a suggestion what I might have to change to get this working on the Apache 2.4 server of my webhoster?
SetEnv MAINTENANCE_MODE 1
RewriteEngine On
# REWRITE REQUESTS TO /MAINTENANCE(/) TO /MAINTENANCE.HTML
RewriteRule ^maintenance/?$ /maintenance.html [L,END]
<If "%{ENV:MAINTENANCE_MODE} == '1'">
# EXCLUDE IPS FROM THIS REWRITE
RewriteCond %{REMOTE_ADDR} !=1.2.3.41
RewriteCond %{REMOTE_ADDR} !=1.2.3.42
# EXCLUDE MAINTENANCE.HTML AND THE MAINTENANCE URL ITSELF FROM BEING REDIRECTED
RewriteCond %{REQUEST_URI} !^/maintenance\.html$
RewriteCond %{REQUEST_URI} !^/maintenance/?$
# REDIRECT ALL OTHER IPS TO THE MAINTENANCE PAGE
RewriteRule ^(.*)$ /maintenance/ [R=302,L]
</If>
Btw - I've checked with AddType application/x-lsphp83 .php inside the <If>-block that the If-condition is working.
This is most probably due to the order of processing.
SetEnvis processed very late.<If>expressions are evaluated early, but merged late. mod_rewrite is processed very early and behaves "differently" when enclosed in an<If>block.Try the following instead...
SetEnvIfto set the env var, which is processed early.<If>expression since the env var can be evaluated in a mod_rewrite condition.For example:
Although, consider sending a 503 instead to serve a custom maintenance page.