How to hide index.php on Microsoft Windows Server with IIS7

I've seen lot of people struggling in finding a way to hide the script name when installing their Yii Application. In an Apache environment everything is well documented in this wiki article, but for those who are running their app on a Windows Server machine there are no hints.

IIS 7.0 introduces a native URL rewriting module, and it can be configured as you want simply creating a web.config file (that is a simple xml file) and putting it on the root level folder.

Basically what follows is a simple translation of the classic .htaccess file used in LAMP environment.

The old .htaccess file:

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Now become web.config:

[xml]
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>

<directoryBrowse enabled="false" />
			
	<rewrite>
		<rules>
		<rule name="Hide Yii Index" stopProcessing="true">
			<match url="." ignoreCase="false" />
			<conditions>
			<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
			<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
			</conditions>
				<action type="Rewrite" url="index.php" appendQueryString="true" />
		</rule>	
		</rules>
	</rewrite>
		
</system.webServer>	
</configuration>

Just place this file in your root folder and everything should work like a charm, obviously you still need that your urlManager component must have its "showScriptName" param set to false.

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName'=>false,
     'caseSensitive'=>false,        
),

This feature has been succesfully tested on Windows Azure Web Sites.