Putting your ASP.NET Web Application in Maintenance Mode (using ISAPI_Rewrite)
Prompted by @slace’s tweet:
i wish there was a way to use app_offline but still view from certain ip's
— Aaron Powell (@slace) September 29, 2009
I replied with a suggestion that we’ve used in the past. Aaron said I should blog about it… so here I am (again)!
A while ago we needed to do an Umbraco upgrade (from v3 to v4) on a production server – in my opinion it was a pretty major upgrade on a live site, we had done a couple of test upgrades on dev and staging, all was successful. But since there was various parts of the site that we need to regression test, I felt it best to take the entire site offline whilst we upgraded.
Usually creating an “App_Offline.htm” page in the root of your web app is enough to take it offline. However that was no good for testing… so what to do?
This is where ISAPI_Rewrite is your best friend, (or .htaccess to be precise). We needed to configure the site to allow access for us and redirect everyone else to a “Site under maintenance” page. I found a few examples across the web, but to save you all that hassle, here are the .htaccess rules that we use:
# BEGIN Maintanence Mode <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !/offline.html$ RewriteCond %{REMOTE_ADDR} !^82.13.23.230$ RewriteRule ^(.*)$ /offline.html [R=302,L] </IfModule> # END Maintanence Mode
What does it do? The first “RewriteCond” rule checks that you are not requesting the “offline.html” page (otherwise you would end up in a constant loop!) The second “RewriteCond” checks the IP address of the visitor – in my case it was “82.13.23.230” (remember to escape the dots). If those two rules aren’t satisfied, then the “RewriteRule” is used, redirecting the visitor to the “offline.html” page.
As always, I am open to any suggestions or improvements!