Using URL Rewrite with Web Site Testing
Recently I ran into an interesting situation when I was rolling out a new web-based application. I had tested it on my development server, and because it was a rather complex application I wanted to test it on my production server before making it live. I had already set up a placeholder web site with a home page that announced the new site as "Coming Soon," and I had some of the supporting infrastructure configured for the placeholder site: database connections, permissions, FTP bindings, etc.
In order to test the new site, I could have set up a temporary web site by duplicating the placeholder web site, running my tests, and then deleting the temporary site after I was comfortable that everything was working in production. Or I could simply remove the placeholder web site and replace it with the temporary web site once the testing phase was over. I didn't like either of those ideas, so I came up with much easier solution using URL Rewrite. Here are the details:
First, I added an additional host header binding to the placeholder web site with a temporary name that only I knew about. Since I use a wildcard A record for my DNS, I can add any additional prefixes to my domain name without registering those as CNAME records in DNS. (This makes the temporary name more difficult to discover.) For example, if I created an A record for "*.example.com," then I could use "temp.example.com" without any changes to DNS.
Second, I added a URL Rewrite rule that checked all inbound requests by using the following logic:
- If the request was for "temp.example.com", then URL Rewrite would allow regular access the web site.
- If the request was for any other domain name and any web page other than "ComingSoon.htm", then URL Rewrite would redirect those requests to "/ComingSoon.htm".
Here's what the URL Rewrite rule looked like in my web.config file:
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Temporary Redirect" patternSyntax="Wildcard" stopProcessing="true">
<match url="ComingSoon.htm" negate="true" />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="temp.example.com" />
</conditions>
<action type="Redirect" url="/ComingSoon.htm" appendQueryString="false" redirectType="Found" />
</rule>
</rules>
</rewrite>
</system.webServer>
This allowed me to test the web site on my production server by using a temporary domain name that no one else knew about, and sending every other HTTP request to the "Coming Soon" announcement page. After a few days of putting the web site through some test passes, all that I needed to do was to remove the URL Rewrite rule and the site was officially live.