One of the greatest advantages that Apache server has had over the years, compared to prior versions of IIS, is the ability to use mod_rewrite to change URLs on the fly very easily.
While there were options for this on earlier versions of IIS via the ISAPI rewrite modules, they were problematic and resource intensive for sites with a lot of traffic and/or custom code.
Now you may be wondering why this is a big deal? Well if you are running an intranet site, it really isn’t unless you want your users to see nice friendly URLs they can remember.
The beauty of this comes into play when you are trying to rank your website for certain keywords on the major search engines. It is much easier if the URL of the webpage contains the keyword than if it is just some random number because of the content management system you might be using.
Well IIS7 now has an answer to that problem with the release of the URL Rewrite extension.
This has been in testing for several months, but just recently went to a "Go Live" status, which means it is clear for production environments.
In this article I am going to walk through installing and configuring the URL Rewrite module on a Windows 2008 Server running IIS7.
Let’s start by installing the URL rewrite extension on our server. You will be able to download the URL Rewrite from the following locations depending on your version of server:
Microsoft URL Rewrite Module for IIS 7.0 Go Live (x86)
Microsoft URL Rewrite Module for IIS 7.0 Go Live (x64)
Once you go and download the file you need we can start. I am going to assume that you already have IIS7 installed on the server you are working on.
1. Double click on the version of the file you downloaded.
2. The license agreement is up first, go ahead and accept the terms by placing a check in the box provided then click Install.

3. You’ll see a status bar as it installs itself and then you will see a window that tells you the install is now complete. Click on Finish to close.

That’s all there is! Refreshing to have an easy install isn’t it? Don’t worry all the hard stuff is on the back end for this module.
There are many different ways to use the URL Rewrite module. Some of these are very complex using programming regular expressions to match rules, and others are straight static mappings.
You can also use the URL Rewrite module to make all your urls lowercase. Let’s take a look at a few examples of how to use these.
This is one of the more straightforward usages of the URL Rewrite module as it doesn’t require complicated matching in the rules, you are basically doing mapping from one name to another.
Some applications have long file names that are not really friendly for the users or search engines. For this example I’m going to show you how to use a search engine friendly url to map to the unfriendly one.
We will use a friendly URL like this one:
http:// localhost /iis7/urlrewrites/
And map it to the unfriendly url on the backend:
http:// localhost /index.asp?cat=iis7&topic=urlrewrites
1. Start IIS Manager.
2. Left click on the site you want to work with and then left click on URL Rewrite in the center pane.

3. In the right pane, click on Add Rule.

4. There are 4 rule templates loaded by default. For our example we are going to choose Rule with rewrite map.

5. In the Choose the rule action: pick Rewrite in the drop down, and then in the Choose the rewrite map:, you can either choose an existing one or type in a name of the new one.
In our test I am simply going to name this rewrite map Demo. When you’re done click Ok.

6. Now you are in the Edit Rewrite Map mode, in the right pane click Add Mapping Entry.

7. Now the Add Mapping Entry window opens up and we can add the original page value and the new page value.
For this article in the original value we will use: /iis7/urlrewrites/ and in the New value we will use /index.aspx?cat=iis7&topic=urlrewrites and then click Ok.

8. In the center pane you can now see your static mapping. If you have others you need to map then you can add them in here by following the steps above.

9. I’m going to show the results using a test page that will call the destination url from the server to show what it would call on the backend.
I am going to open my browser and go to http://localhost/iis7/urlrewrites/ as you can see in the screenshot the backend call would have gone to the url http://localhost/index.aspx?cat=iis7&topic=urlrewrites.

In this way you can make unfriendly urls from applications such a Joomla appear much friendlier to search engine and users.
Another useful feature of the URL Rewrite module is the ability to quickly and easily do redirections properly with permanent or temporary status (301 or 302).
Very useful if you are changing page names and want your users and search engines to easily find the new content.
You use a 301 if it is going to be a permanent change or if it is just temporary then use a 302. Again we will use a rewrite map for this. In this example we will do the following:
Redirect the page: http://localhost/oldpage.htm
To the page: http://localhost/newpage.htm
1. In IIS Manager go the site you want to define redirects on and then click on URL Rewrite in the center pane.

2. Click on Add Rules in the right pane.

3. For this demonstration we are going to choose Rule with rewrite map and click Ok.

4. In the dropdown choose Redirect and for the Rewrite Map name type in Redirect Demo, then click OK.

5. Now click on Add Mapping Entry in the right pane.

6. For the Original Value use /oldpage.htm and for the New Value use /newpage.htm then click OK.

7. You can now see your mapping in the Rewrite Map table as shown below:

8. By default these will be permanent redirects (301), which should be fine for most uses, but if you know this is a temporary page for something like a seasonal sale, then you can set this to be a temporary (302) redirect so the search engines don’t lose the original page from their index.
To do this click on Back to Rules.

9. Choose Redirect rule 1 for Redirect Demo and then click Edit in the right pane.

10. Go to the bottom of the Edit Rule page and you will see Redirect Type:. In the dropdown go ahead and choose the type of redirect.
For this example I am going to leave it at 301, but if you needed to you could change it to one of the others. After choosing your type, click Apply in the right panel.

11. Let’s go ahead and test this by pointing our browser at http://localhost/oldpage.htm and hitting Enter.

12. Your url should have been redirected to http://localhost/newpage.htm without any intervention or error message from the server.

These two parts of the URL Rewrite module just scratch the surface of this powerful add on.
While these examples are mostly manual mappings the true beauty of this add on is that you can assign these rules using programming functions on the fly, but that is beyond the scope of this article.
I will be using this module in a few upcoming articles having to do with installing popular open source CMS software such as WordPress and Joomla.
Copyright © Train Signal Inc. All Rights Reserved.
Marc Ready Says:
September 25th, 2008 at 8:10 pm
Great post but perplexing…
Does that mean you have manually create a mapping entry for every dynamic page?
I hope not.
I can’t wait to see your write up on how to use this with WordPress and Joomla.
I wonder if hosting companies will install this add on so it can be used in a shared Windows 2008 hosting environment.
David Lawlor Says:
September 26th, 2008 at 10:53 am
Marc-
There are dynamic ways to get this to work, but it requires programming understanding to look at regular expressions which is a little hard to cover in these shorter articles. I may do a follow-up with more of the regular expression side if there is enough demand.
With that being said you can do edit the web.config file directly so you can easily do some excel magic to put a large amount of urls into play without having to use the GUI which will speed things up significantly.
Ruslan Yakushev Says:
October 24th, 2008 at 2:15 am
This is a great article - thanks for posting it!
As with regards to creating mapping entries vs. using regular expressions - this article may give you an idea when to use which approach: http://ruslany.net/2008/07/iisnet-uses-url-rewrite-module.
Getting this to work with Wordpress is pretty simple. This article explains how to do it: http://learn.iis.net/page.aspx/466/enabling-pretty-permalinks-in-wordpress