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 version="1.0" encoding="UTF-8"?>

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

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.


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

6 0
Viewed: 29 190 times
Version: 1.1
Category: How-tos
Written by: Giuliano
Last updated by: Giuliano
Created on: Sep 11, 2012
Last updated: 9 years ago
Update Article


View all history

Related Articles