CakePHP with IIS 7 Rewrite Rules in a Sub Folder

My co-worker pointed me to a new PHP Database MVC resource called CakePHP but I couldn’t get the URL Rewrite rules to work on IIS 7. After much trouble shooting I finally tweaked the web.config file to work with CakePHP installed in a sub folder.

Here is the web.config file I used with CakePHP in a sub folder.

 <configuration>
   <system.webServer>
     <rewrite>
       <rules>
         <clear/>
         <rule name="Imported Rule 0" stopProcessing="true">
           <match url="^(img|css|files|js)(.*)$"></match>
           <action type="Rewrite" url="/{Path_To_CakePHP_Directory}/app/webroot/{R:1}{R:2}" appendQueryString="false"></action>
         </rule>
         <rule name="Imported Rule 1" stopProcessing="true">
           <match url="^(.*)$" ignoreCase="false" />
           <conditions logicalGrouping="MatchAll">
             <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
             <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
           </conditions>
           <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
         </rule>
         <rule name="Imported Rule 2" stopProcessing="true">
           <match url="^$" ignoreCase="false" />
           <action type="Rewrite" url="/{Path_To_CakePHP_Directory}/app/webroot/" />
         </rule>
         <rule name="Imported Rule 3" stopProcessing="true">
           <match url="(.*)" ignoreCase="false" />
           <action type="Rewrite" url="/{Path_To_CakePHP_Directory}/app/webroot/{R:1}" />
         </rule>
         <rule name="Imported Rule 4" stopProcessing="true">
           <match url="^(.*)$" ignoreCase="false" />
           <conditions logicalGrouping="MatchAll">
             <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
             <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
           </conditions>
           <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
         </rule>
       </rules>
     </rewrite>
   </system.webServer>
 </configuration>

4 Comments

  1. Thank you! This worked for me on IIS 7.5, PHP 5.3.

    Reply
  2. Thank you!!! :) This worked also for me!!!

    Reply
  3. Dude, you are awesome. Thanks for this! Did you find any other challenges when running cakephp on IIS?

    Reply
    • Thanks a lot. It worked Great!

      Reply

Leave a Reply