<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.iis.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:cs="http://blogs.iis.net/"><channel><title>Tobin Titus Blog : configuration</title><link>http://blogs.iis.net/tobintitus/archive/tags/configuration/default.aspx</link><description>Tags: configuration</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>IIS Security – Past and Present</title><link>http://blogs.iis.net/tobintitus/archive/2009/04/28/iis-security-past-and-present.aspx</link><pubDate>Tue, 28 Apr 2009 08:24:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3122704</guid><dc:creator>TobinTitus</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/tobintitus/rsscomments.aspx?PostID=3122704</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/tobintitus/commentapi.aspx?PostID=3122704</wfw:comment><comments>http://blogs.iis.net/tobintitus/archive/2009/04/28/iis-security-past-and-present.aspx#comments</comments><description>&lt;p&gt;This topic has been covered many times both by Microsoft and non-Microsoft employees. However, I’ve recently been asked what the main features of IIS 7 are and have seen a great deal of misinformation about IIS security on twitter, blog posts and forums. &lt;/p&gt;  &lt;p&gt;I think, therefore, the issue deserves yet another look. In this post, I’m going to go over security in the past for IIS and then move on to talk about security features in IIS 7. These are not in any particular order. This post is not meant to diminish the many thoughtful works already created by others – both complimentary and critical. This is just meant to bring the subject back up for discussion again in hopes that you can be properly equipped with the decision making information you may need.&lt;/p&gt;  &lt;h2&gt;Ghosts of IIS Security Past&lt;/h2&gt;  &lt;p&gt;The reason for so much misinformation about the current state of security in IIS is likely due to the earned reputation the product had in versions previous to IIS 6.0. A quick search on the web for &lt;a href="http://search.live.com/results.aspx?q=IIS+5+security+vulnerability&amp;amp;src=IE-SearchBox&amp;amp;Form=IE8SRC" target="_blank"&gt;IIS 5 security vulnerabilities&lt;/a&gt; may be like a walk down memory lane for some of the more veteran administrators and IT staff across the globe. The search results are littered with critical vulnerabilities related to buffer overflows, ISAPI extensions, exploits on rarely-used features, or features that were available by a default installation. We are haunted by names like “&lt;a href="http://en.wikipedia.org/wiki/Code_Red_(computer_worm)" target="_blank"&gt;Code Red&lt;/a&gt;” and “&lt;a href="http://en.wikipedia.org/wiki/Nimda" target="_blank"&gt;Nimda&lt;/a&gt;”. I don’t know about you, but those very names send shivers down my spine. I was consulting as a developer and web administrator for a very large property management company when these hit. We were lucky enough to avoid these as we had patched our services. That said, many whom I did business with on a regular basis were not very happy. So, to be clear, I feel the misinformation that is spread today is built on an element of experience with previous versions. Secunia reports &lt;a href="http://secunia.com/advisories/product/39/" target="_blank"&gt;16 advisories and 6 vulnerabilities&lt;/a&gt; with IIS 5.&amp;#160; And so started the reputation , perhaps deservedly so, that IIS was not secure unless you really knew what you were doing with security.&lt;/p&gt;  &lt;p&gt;Bill Gates was apparently visited by the ghosts of security past, present and future when he laid his head on his pillow January 14th, 2002. I say that because on January 15th, 2002 Mr. Gates sent out the &lt;a href="http://www.wired.com/techbiz/media/news/2002/01/49826" target="_blank"&gt;now-famous trustworthy computing memo&lt;/a&gt; to every employee at Microsoft.&amp;#160; This set off a major revamp of products from the ground up. Standards were set for test planning and testing. Writing Secure Code was mandatory reading for every Microsoft developer and tester. The results have been staggering.&lt;/p&gt;  &lt;p&gt;Security drastically improved in Microsoft products over the years, and IIS was definitely no exception to this. IIS 6 saw &lt;a href="http://secunia.com/advisories/product/1438/" target="_blank"&gt;5 security advisories and 4 vulnerabilities&lt;/a&gt; reported since 2003. Not to get ahead of myself, but IIS 7 has &lt;a href="http://secunia.com/advisories/product/17543/" target="_blank"&gt;exactly 1 advisor and 1 vulnerability&lt;/a&gt; from Secunia. Compare this against Apache 2.0.x which has had &lt;a href="http://secunia.com/advisories/product/73/" target="_blank"&gt;39 advisories and 23 vulnerabilities&lt;/a&gt; (4 of which are still unpatched as of this writing) and Apache 2.2.x which has had &lt;a href="http://secunia.com/advisories/product/9633/" target="_blank"&gt;10 advisories and 16 vulnerabilities&lt;/a&gt; (2 of which are still unpatched as of this writing) in the same period.&amp;#160; Now I have seen attempts (&lt;a href="http://googleonlinesecurity.blogspot.com/2007/06/web-server-software-and-malware.html" target="_blank"&gt;[1]&lt;/a&gt;, &lt;a href="http://blog.washingtonpost.com/securityfix/2007/05/cyber_crooks_hijack_activities_1.html" target="_blank"&gt;[2]&lt;/a&gt;) to quantify or otherwise explain these numbers further. You can read those articles for yourself and determine how much weight you want to give them. However you skew it, the facts should speak for themselves – IIS has dramatically improved and taken a leadership roll in security in IIS 6 and 7. Our ghost of IIS past still haunts the product’s reputation today, despite obvious strides taken. Even if you feel you like Apache better I think it is only fair to give credit where it is due. &lt;/p&gt;  &lt;h2&gt;Improvements in IIS 6&lt;/h2&gt;  &lt;p&gt;The IIS team took the four tenants of Microsoft’s Trustworthy Computing initiative to heart: Secure by Design, Secure by Default, Secure in Deployment and Secure Communication. Since we are already on the next version, I won’t spend a great deal of time talking about the security improvements in the last version other than a brief overview so you know how they relate to changes in our current version, IIS 7. &lt;/p&gt;  &lt;p&gt;IIS 6 took vast strides to improve security. During upgrade installations, IIS 6 was disabled by default if the previous server had not been secured by the &lt;a href="http://blog.washingtonpost.com/securityfix/2007/05/cyber_crooks_hijack_activities_1.html" target="_blank"&gt;IIS lockdown tool&lt;/a&gt;. The architecture was completely revamped to separate kernel-mode HTTP listening from user-mode application execution. Changes were made to application pools, authentication, access control, encryption and certificate handling, auditing, logging and patch management that made the product far superior to its predecessors. You can find a detailed list of these features on &lt;a href="http://technet.microsoft.com/en-us/library/cc736369.aspx" target="_blank"&gt;TechNet&lt;/a&gt;.&amp;#160; SecurityFocus did a comparison of these features in &lt;a href="http://www.securityfocus.com/infocus/1765" target="_blank"&gt;March of 2004&lt;/a&gt;.Server Watch wrote an article in &lt;a href="http://www.serverwatch.com/tutorials/article.php/3294371" target="_blank"&gt;December of 2003&lt;/a&gt;. By most accounts, everything accomplished in IIS 6 was a huge step in the right direction.&lt;/p&gt;  &lt;p&gt;Despite the massive steps already taken in IIS6, IIS 7 took these all a bit further. Let’s go ahead and investigate these now.&lt;/p&gt;  &lt;h2&gt;Improvements in IIS 7.x&lt;/h2&gt;  &lt;h3&gt;Customizable Installation&lt;/h3&gt;  &lt;p&gt;Continuing with the tenant of being secure in deployment, IIS 7 has made installation a wonder to behold. In IIS 6, you could reduce your attack surface by disabling features native to web server. However, these features were still loaded into the process. This carried not only a security factor, but also a performance and memory footprint issue.&amp;#160; IIS 7 has a completely modular architecture. That means that features which you do not want are not only NOT loaded into the process, you can leave the bits for those features off of your disk completely. &lt;/p&gt;  &lt;h3&gt;Limitable Attack Surface&lt;/h3&gt;  &lt;p&gt;This is a bit dubious and is essentially part of the customizable installation. By reducing the modules that are available on disk or loaded into a process, you significantly reduce the attack surface for your specialized web servers. If all you intend to do is serve static content with caching and no default documents, you can simply install the static file handler and caching module and leave the rest of the IIS modules off of your server. Additional controls and limitations will also reduce your attack surface and I’ll cover those below.&lt;/p&gt;  &lt;h3&gt;IUSR account&lt;/h3&gt;  &lt;p&gt;Anyone who has tried to migrate an IIS installation from one machine to another or attempted to recover your installation on a new machine, previous to IIS 7, has likely run into an issue with the local “IUSR_&amp;lt;machine_name&amp;gt;” account.&amp;#160; IIS 7 now uses a built-in IUSR account that allows you to easily copy your security settings from one machine to the next. This is great news for those using distributed configuration in web farms, recovery, restoration, or replication.&lt;/p&gt;  &lt;h3&gt;IIS_IUSRS group&lt;/h3&gt;  &lt;p&gt;IIS 6 introduced the IIS_WPG group. Application pool security identities had to be assigned to this group in order to host the w3wp.exe process. Like the IUSR account, IIS 7 now creates a built-in security group (IIS_IUSRS) and assigns application pool identities to the group automatically. You can find more information about the built-in user and built-in group for IIS 7 on IIS.NET (&lt;a href="http://learn.iis.net/page.aspx/140/understanding-the-built-in-user-and-group-accounts-in-iis-7/." target="_blank"&gt;Understanding the Built-In User and Group Accounts in IIS 7.0&lt;/a&gt;). &lt;/p&gt;  &lt;h3&gt;ASP.NET / IIS Unified Security Architecture&lt;/h3&gt;  &lt;p&gt;Previous versions of IIS did not provide a unified approach to security with ASP.NET. The IIS 7 unified request pipeline that supports both Windows and non-Windows principals and provides one place to do all authentication and authorization. Apart from simplification and performance improvements, this also reduces the attack surface and allows for greater flexibility in authentication / authorization scenarios with custom modules.&lt;/p&gt;  &lt;h3&gt;Request Filtering / URL Rewriting&lt;/h3&gt;  &lt;p&gt;IIS 7.0 includes a request filtering module that is based on the URLScan ISAPI Filter for IIS 6.0. The module helps you tighten security of your Web servers. &lt;/p&gt;  &lt;p&gt;The IIS team has also released an add-on URL rewrite module for IIS 7.0, which provides functionality for rule-based URL manipulation. Even though the primary purpose of the URL rewrite module is to rewrite URL paths for requests, the rewrite module can also be used as a security enforcement tool that helps prevent access to Web site content.&lt;/p&gt;  &lt;h3&gt;Application Pool Identities&lt;/h3&gt;  &lt;p&gt;On top of Application Pool Isolation, IIS introduces a new security feature in Service Pack 2 of Windows Server 2008 and Windows Vista. It's called Application Pool Identities. Application Pool Identities allows you to run Application Pools under an unique account without having to create and manage domain or local accounts. The name of the Application Pool account corresponds to the name of the Application Pool. &lt;/p&gt;  &lt;h3&gt;Kernel mode SSL&lt;/h3&gt;  &lt;p&gt;The implementation of SSL has changed from IIS 6.0 to IIS 7.0.&amp;#160; On Windows Server 2003, all SSL configuration was stored in the IIS metabase and encryption/decryption happened in user mode (required a lot of kernel/user mode transitions).&amp;#160; On Windows Vista and Windows Server® 2008, HTTP.sys handles SSL encryption/decryption in kernel mode, resulting in up to 20% better performance for secure connections.&amp;#160; &lt;/p&gt;  &lt;h3&gt;Configuration Improvements&lt;/h3&gt;  &lt;p&gt;IIS 7.0 allows locking and unlocking configuration settings in various levels and scopes. Locking down configuration means that it cannot be overridden (or set at all) at lower levels in the hierarchy. Unlocking configuration can only be done at the level where it was locked. This is useful, for example, when creating different configuration for different sites or paths, and only some of sites and paths are allowed to override it. Locking can be done at the section level or for specific elements, attributes, collection elements and collection directives within sections.&lt;/p&gt;  &lt;h3&gt;Dynamic IP Restriction&lt;/h3&gt;  &lt;p&gt;IIS 7 provides a new module that allows dynamic, temporary IP address restriction. This module prevents brute force attacks and HTTP clients that make unusually high number of concurrent requests or a large number of requests over a short period of time.&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;A verbose list of security features in IIS 6 and IIS 7 might be nearly impossible. Apart from the obvious features, there were numerous improvements to code made over these two versions that make the product far more secure than IIS 5 and earlier. That said, this should give you a summary start on information. I’ve listed some reference documents that may help you understand these features better.&amp;#160; In general, I would encourage you to ask questions of the product team and or other users on the &lt;a href="http://forums.iis.net/" target="_blank"&gt;IIS.NET forums&lt;/a&gt; if you hear something that sounds negative regarding IIS. If the feedback is true, the product team has the benefit of improving the next release. If the feedback is unfounded, the product team has the benefit of helping you find the information you need to make an informed decision. &lt;/p&gt;  &lt;h2&gt;See Also&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/posts/scobleizer/Brent-Hill-and-Roger-Grimes-Chatting-about-IIS-7s-security/"&gt;&lt;strong&gt;Brent Hill and Roger Grimes - Chatting about IIS 7's security&lt;/strong&gt;&lt;/a&gt; (From Sept. 2005)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://channel9.msdn.com/shows/TechNet+Radio/TechNet-radio-Learn-about-the-IIS7-Security-features-and-benefits/" target="_blank"&gt;&lt;strong&gt;TechNet radio: Learn about the IIS7 Security features and benefits&lt;/strong&gt;&lt;/a&gt;&amp;#160;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.gartner.com/DisplayDocument?doc_cd=125453" target="_blank"&gt;&lt;strong&gt;Management Update: IIS Is No Longer the Problem in Web Server Security&lt;/strong&gt;&lt;/a&gt; (Gartner)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/emea/spotlight/sessionh.aspx?videoid=568&amp;amp;PUID=00034001826C5CC7" target="_blank"&gt;&lt;strong&gt;IIS 7 Security: Less Exposure, Greater Control&lt;/strong&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc731278.aspx" target="_blank"&gt;&lt;strong&gt;TechNet: Configure Web Server Security&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/88/configuring-security/" target="_blank"&gt;&lt;strong&gt;IIS.NET : Configuring Security&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/139/iis7-security-improvements/" target="_blank"&gt;&lt;strong&gt;IIS.NET : IIS Security Improvements&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://learn.iis.net/page.aspx/548/using-dynamic-ip-restrictions/" target="_blank"&gt;&lt;strong&gt;Using Dynamic IP Restrictions&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering" target="_blank"&gt;&lt;strong&gt;IIS.NET Configuration Reference: Request Filtering&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3122704" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/tobintitus/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/IIS+7/default.aspx">IIS 7</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/Installation/default.aspx">Installation</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/Application+Pools/default.aspx">Application Pools</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/IIS+5.1/default.aspx">IIS 5.1</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/IIS+6/default.aspx">IIS 6</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/configuration/default.aspx">configuration</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/Logging/default.aspx">Logging</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/URL+Rewriter/default.aspx">URL Rewriter</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/Security/default.aspx">Security</category></item><item><title>Installing CakePHP on IIS 7</title><link>http://blogs.iis.net/tobintitus/archive/2009/04/03/installing-cakephp-on-iis-7.aspx</link><pubDate>Fri, 03 Apr 2009 14:15:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3050460</guid><dc:creator>TobinTitus</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/tobintitus/rsscomments.aspx?PostID=3050460</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/tobintitus/commentapi.aspx?PostID=3050460</wfw:comment><comments>http://blogs.iis.net/tobintitus/archive/2009/04/03/installing-cakephp-on-iis-7.aspx#comments</comments><description>&lt;P&gt;Recently I spoke with someone on Twitter who was having issues running &lt;A href="http://cakephp.org/" mce_href="http://cakephp.org/"&gt;CakePHP&lt;/A&gt; on IIS. With all the talk about ASP.NET MVC on IIS, folks forget that the MVC pattern works in other languages as well. CakePHP provides MVC&amp;nbsp; development on PHP. That said, I wanted to dive in and see what the issues were involved in getting this project up and running on IIS 7. I managed to get it installed pretty quickly, but it does take a little tweaking to get you up and running. I've chronicled my adventures with CakePHP below in case anyone else is having issues. That said, I must first say that I am not an expert working with CakePHP. This was my first experience with the project, so this information is provided "as-is" and should be taken with a grain of salt. With this demo, I’ll be walking through the "&lt;A href="http://book.cakephp.org/view/326/The-Cake-Blog-Tutorial" target=_blank&gt;Cake Blog Tutorial&lt;/A&gt;” offered on cakephp.org, and modifying it as needed to work with IIS 7. That said, let's get started.&lt;/P&gt;
&lt;H2&gt;Prerequisites&lt;/H2&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;Install: IIS 7 on Windows 2008 Server or Windows Vista&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;Install: &lt;A href="http://php.iis.net/" target=_blank&gt;PHP&lt;/A&gt; for IIS 7.0. Use the &lt;A href="http://www.microsoft.com/web/downloads/platform.aspx" mce_href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web Platform Installer&lt;/A&gt; for easiest experience.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;Install: &lt;A href="http://www.iis.net/extensions/URLRewrite"&gt;URL Rewriter&lt;/A&gt; module. Use the &lt;A href="http://www.microsoft.com/web/downloads/platform.aspx" mce_href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;Web Platform Installer&lt;/A&gt; for easiest experience.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;Install: A database &lt;A href="http://book.cakephp.org/view/308/Installing-CakePHP" target=_blank&gt;supported by CakePHP&lt;/A&gt;. This post uses MySQL.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;Download: &lt;A href="http://cakephp.org/"&gt;CakePHP&lt;/A&gt; source code&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;Unzip: CakePHP (entire contents) to the intended path&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Yes, there ARE a lot of Prerequisites, but these are pretty typical for any MVC app on any platform.&lt;/P&gt;
&lt;H2&gt;Assumptions / Conventions&lt;/H2&gt;
&lt;P&gt;For the purposes of this post, I will use the convention/assumption that you have unzipped CakePHP to c:\inetpub\CakePHP\ . You should have the following paths now:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;c:\inetpub\CakePHP\&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;\app&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;\cake&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;\vendors&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;.htaccess&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;index.php&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;version.txt&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I will also use the assumption that this is being installed on the "Default Web Site". This is unlikely what you are doing, so you'll want to replace the "Default Web Site" instances in the steps below with your site or application path.&lt;/P&gt;
&lt;P&gt;Lastly, I will assume that you are using and have already installed MySQL. You may use another database if you please, but this blog will reference MySQL.&lt;/P&gt;
&lt;H2&gt;&lt;B&gt;Installing the Blog Sample&lt;/B&gt;&lt;/H2&gt;
&lt;H3&gt;&lt;B&gt;Pointing IIS to the cake document root&lt;/B&gt;&lt;/H3&gt;
&lt;P&gt;First, you'll need to configure your website to point to the correct location. Using the assumptions above, the correct location would be c:\inetpub\CakePHP\app\webroot\ . &lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Creating a Blog Database&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Second, configure your database connection. To do this, you’ll need to create a blog database, and then point your configuration to that new catalog.&lt;/P&gt;
&lt;P&gt;Start by creating a new MySQL Catalog using your favorite tool. I used &lt;A href="http://dev.mysql.com/downloads/gui-tools/5.0.html" target=_blank&gt;MySQL Administrator&lt;/A&gt;. Simply right click in the catalogs and click “create new schema.”&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://tobint.com/timgs/cakephp/mysql-createschema.jpg" width=599 height=480&gt; &lt;/P&gt;
&lt;P&gt;Create a schema named “CakeBlog”. Once the schema is created, click on the “Tools” menu and select “MySQL Query Browser” and execute the following script:&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#006400&gt;/* First, create our posts table: */&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;CREATE&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;TABLE&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;posts&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;id&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;INT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;UNSIGNED&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;AUTO_INCREMENT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;PRIMARY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;KEY&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;title&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;VARCHAR&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#800000&gt;50&lt;/FONT&gt;&lt;FONT color=#000000&gt;),&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;body&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;TEXT&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;created&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;DATETIME&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;DEFAULT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;NOT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;NULL&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;modified&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;DATETIME&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;DEFAULT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;NOT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;NULL8.)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#006400&gt;/* Then insert some posts for testing: */&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;INSERT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;INTO&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;posts&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(title,body,created)&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#808080&gt;'The title'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'This is the post body.'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;NOW())&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;INSERT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;INTO&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;posts&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(title,body,created)&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#808080&gt;'A title once again'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'And the post body follows.'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;NOW())&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;INSERT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;INTO&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;posts&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(title,body,created)&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;VALUES&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#808080&gt;'Title strikes back'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'This is really exciting! Not.'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;NOW())&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt; &lt;/DIV&gt;
&lt;DIV class=code&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=code&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=code&gt;&lt;EM&gt;* This SQL code copied verbatim from tutorial found here: &lt;/EM&gt;&lt;/DIV&gt;
&lt;DIV class=code&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&lt;A title=http://book.cakephp.org/view/326/The-Cake-Blog-Tutorial href="http://book.cakephp.org/view/326/The-Cake-Blog-Tutorial"&gt;&lt;EM&gt;http://book.cakephp.org/view/326/The-Cake-Blog-Tutorial&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;&lt;/DIV&gt;
&lt;P&gt;You’ve now created your database and a blog posts table with some default posts. Time to configure CakePHP to read from the database:&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Cake Database Configuration&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;We’ll need to let CakePHP know where the database is. Copy &lt;STRONG&gt;database.php.default&lt;/STRONG&gt; in c:\inetpub\CakePHP\app\config\ to &lt;STRONG&gt;database.php&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Open c:\inetpub\cakephp\app\config\database.php and change the $default variable to point to your database: &lt;BR&gt;&lt;FONT color=#0000ff&gt;var&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;$&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;default&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;array(&lt;/FONT&gt;&lt;FONT color=#808080&gt;'driver'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'mysql'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'connect'&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'mysql_connect'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'host'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'localhost'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'login'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'CakeBlog'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'password' &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'c4ke-1z-k00l'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'database' &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt; 'CakeBlog'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'prefix'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt; ''&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt; &lt;/P&gt;
&lt;DIV class=code&gt;&lt;EM&gt;&lt;/EM&gt;&lt;/DIV&gt;
&lt;DIV class=code&gt;&lt;EM&gt;* This PHP code copied nearly verbatim from tutorial found here: &lt;/EM&gt;&lt;/DIV&gt;
&lt;DIV class=code&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&lt;A title=http://book.cakephp.org/view/326/The-Cake-Blog-Tutorial href="http://book.cakephp.org/view/326/The-Cake-Blog-Tutorial"&gt;&lt;EM&gt;http://book.cakephp.org/view/326/The-Cake-Blog-Tutorial&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;&lt;/DIV&gt;
&lt;P&gt;You should not be able to open your browser to your application and see the default cake configuration page.&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Setting up Rewriting Rules&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;CakePHP uses mod_rewrite, but also provides the ability to use Cake’s built-in ‘pretty URLs’. We’ll be importing the mod_rewrite rules from the .htaccess files from the default cakephp installation into the IIS URL Rewrite module. We’ll then have to modify those rules.&lt;/P&gt;
&lt;P&gt;Start this process by opening the IIS Management Console. Open your application path. In this instance, we are using “Default Web Site”. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Click on the “&lt;STRONG&gt;Default Web Site&lt;/STRONG&gt;” &lt;/LI&gt;
&lt;LI&gt;Open the “&lt;STRONG&gt;URL Rewrite&lt;/STRONG&gt;” module &lt;/LI&gt;
&lt;LI&gt;Click on “&lt;STRONG&gt;Import Rules…&lt;/STRONG&gt;” in the &lt;STRONG&gt;Actions&lt;/STRONG&gt; pane &lt;BR&gt;&lt;IMG src="http://tobint.com/timgs/cakephp/mod-rewrite.jpg" width=563 height=480&gt; &lt;/LI&gt;
&lt;LI&gt;Click the “&lt;STRONG&gt;…&lt;/STRONG&gt;” button next to the “Configuration file” textbox. &lt;/LI&gt;
&lt;LI&gt;Select the c:\inetpub\cakephp\.htaccess file and click “&lt;STRONG&gt;OK&lt;/STRONG&gt;” &lt;/LI&gt;
&lt;LI&gt;Click the “&lt;STRONG&gt;Import&lt;/STRONG&gt;” button &lt;/LI&gt;
&lt;LI&gt;Click the “&lt;STRONG&gt;Apply&lt;/STRONG&gt;” button in the “&lt;STRONG&gt;Actions&lt;/STRONG&gt;” pane &lt;/LI&gt;
&lt;LI&gt;Repeat steps 4, 5, 6 and 7 for c:\inetpub\cakephp\app\.htaccess and c:\inetpub\cakephp\app\webroot\.htaccess files. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The rules are imported, but now you’ll need to edit the rules.&lt;/P&gt;
&lt;OL start=start&gt;
&lt;LI&gt;Click the “&lt;STRONG&gt;Back to Rules&lt;/STRONG&gt;” button in the “&lt;STRONG&gt;Actions&lt;/STRONG&gt;” pane&lt;/LI&gt;
&lt;LI&gt;Edit the two rules with the action starting with “&lt;STRONG&gt;webroot/&lt;/STRONG&gt;”&lt;/LI&gt;
&lt;LI&gt;Remove the “&lt;STRONG&gt;webroot&lt;/STRONG&gt;” portion of the “Rewrite URL”. Your paths should now look as follows: &lt;BR&gt;&lt;IMG src="http://tobint.com/timgs/cakephp/mod-rewrite2.jpg"&gt; &lt;/LI&gt;&lt;/OL&gt;
&lt;H3&gt;&lt;STRONG&gt;Creating your MVC Application&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;The remainder of your application setup should follow the steps found in the original “&lt;A href="http://book.cakephp.org/view/326/The-Cake-Blog-Tutorial" target=_blank&gt;Cake Blog Tutorial&lt;/A&gt;”. There is nothing different between IIS and Apache at this point, so copying the steps would be a bit redundant. Start with the step named “&lt;STRONG&gt;&lt;U&gt;Create a Post Model&lt;/U&gt;&lt;/STRONG&gt;”. Much like ASP.NET MVC, Cake provides an MVC pattern for developing PHP applications. &lt;/P&gt;
&lt;P&gt;Once you have completed the steps, you should have a default site that looks something like the following:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://tobint.com/timgs/cakephp/completed.jpg" width=640 height=396&gt; &lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;Summary&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;Installing CakePHP on IIS is actually not much different from installing on Apache. The main difference lies in the implementation of mod_rewrite on Apache vs URL Rewriter in IIS. Obviously the installation of PHP differs from Apache. IIS makes the installation of PHP simple with Web Application Installer. If you are using CakePHP on IIS, I would be interested to hear if your experience was different than mine.&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3050460" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/tobintitus/archive/tags/IIS+7/default.aspx">IIS 7</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/PHP/default.aspx">PHP</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/configuration/default.aspx">configuration</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/URL+Rewriter/default.aspx">URL Rewriter</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/CakePHP/default.aspx">CakePHP</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/mod_5F00_rewrite/default.aspx">mod_rewrite</category></item><item><title>IIS cannot start after upgrade to Vista SP1</title><link>http://blogs.iis.net/tobintitus/archive/2008/09/22/iis-cannot-start-after-upgrade-to-vista-sp1.aspx</link><pubDate>Mon, 22 Sep 2008 04:31:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2636015</guid><dc:creator>TobinTitus</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/tobintitus/rsscomments.aspx?PostID=2636015</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/tobintitus/commentapi.aspx?PostID=2636015</wfw:comment><comments>http://blogs.iis.net/tobintitus/archive/2008/09/22/iis-cannot-start-after-upgrade-to-vista-sp1.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Some time ago, I tried to start up the IIS Management Console on my Vista machine and I received an exception. After trying a few quick fixes, I gave up. I had several VPC images that I worked from and I didn't particularly need this machine to work when I had so many others.&amp;nbsp; However, I've been doing a great deal of development on this machine now, and having IIS working is obviously rather handy. So, I tracked down the exception and solved my problem. I thought I'd go ahead and chronical my adventures for anyone else who is having this issue and needs help.&lt;/P&gt;
&lt;P mce_keep="true"&gt;So first of all, the error that was displayed when I started inetmgr was as follows:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;---------------------------
Failed to connect
---------------------------
There was an error when trying to connect. Do you want to retype your credentials and try again? &lt;BR&gt;Details: 
Creating an instance of the COM component with CLSID {2B72133B-3F5B-4602-8952-803546CE3344} &lt;BR&gt;from the IClassFactory failed due to the following error: 8007000d.
---------------------------
Yes   No   
---------------------------&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So I thought that this might be a configuration error. I tried to roll back to a known good configuration but appcmd failed with the following exception:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;ERROR ( hresult:80070426, message:Command execution failed. &lt;BR&gt;The service has not been started. ) &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I tried to start the service with a good old fashion iisreset command and the following exception occurred:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Attempting stop...&lt;BR&gt;Internet services successfully stopped&lt;BR&gt;Attempting start...&lt;BR&gt;Restart attempt failed.&lt;BR&gt;The IIS Admin Service or the World Wide Web Publishing Service, or a service dep&lt;BR&gt;endent on them failed to start.&amp;nbsp; The service, or dependent services, may had an&lt;BR&gt;error during its startup or may be disabled.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Once again, I thought I'd go into the services console and try to start IIS manually. After trying to start it manually, it failed, stating that a dependent service failed. So I looked at Windows Process Activation Services (WAS) and noticed it was stopped. I tried to start it manually and found the following:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;---------------------------&lt;BR&gt;Services&lt;BR&gt;---------------------------&lt;BR&gt;Windows could not start the Windows Process Activation Service service on Local Computer. &lt;BR&gt;Error 13: &lt;BR&gt;The data is invalid. &lt;BR&gt;---------------------------&lt;BR&gt;OK&amp;nbsp;&amp;nbsp; &lt;BR&gt;---------------------------&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So I checked out the event log and found the following four entries:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;First Event&lt;/STRONG&gt;&amp;nbsp;:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Log Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System&lt;BR&gt;Source:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Service Control Manager&lt;BR&gt;Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9/21/2008 11:52:00 PM&lt;BR&gt;Event ID:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7001&lt;BR&gt;Task Category: None&lt;BR&gt;Level:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error&lt;BR&gt;Keywords:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Classic&lt;BR&gt;User:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N/A&lt;BR&gt;Description:&lt;BR&gt;The World Wide Web Publishing Service service depends on the Windows Process Activation Service service which failed to start because of the following error: &lt;BR&gt;The data is invalid.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Second Event:&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Log Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System&lt;BR&gt;Source:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Service Control Manager&lt;BR&gt;Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9/21/2008 11:52:00 PM&lt;BR&gt;Event ID:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7023&lt;BR&gt;Task Category: None&lt;BR&gt;Level:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error&lt;BR&gt;Keywords:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Classic&lt;BR&gt;User:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N/A&lt;BR&gt;Description:&lt;BR&gt;The Windows Process Activation Service service terminated with the following error: &lt;BR&gt;The data is invalid.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Third Event:&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Log Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System&lt;BR&gt;Source:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft-Windows-WAS&lt;BR&gt;Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9/21/2008 11:51:59 PM&lt;BR&gt;Event ID:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5005&lt;BR&gt;Task Category: None&lt;BR&gt;Level:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error&lt;BR&gt;Keywords:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Classic&lt;BR&gt;User:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N/A&lt;BR&gt;Description:&lt;BR&gt;Windows Process Activation Service (WAS) is stopping because it encountered an error. The data field contains the error number.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Fourt Event:&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Log Name:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System&lt;BR&gt;Source:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Microsoft-Windows-WAS&lt;BR&gt;Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9/21/2008 11:51:59 PM&lt;BR&gt;Event ID:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5036&lt;BR&gt;Task Category: None&lt;BR&gt;Level:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Error&lt;BR&gt;Keywords:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Classic&lt;BR&gt;User:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N/A&lt;BR&gt;Description:&lt;BR&gt;The configuration manager for Windows Process Activation Service (WAS) did not initialize. The data field contains the error number.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I checked through my event logs and realized that this started happening after I had upgraded to SP1. I hadn't recognized this as the issue because, as I said, don't typically use IIS on this machine on a regular basis. I decided to go back to my initial assessment that this had to be configuration related. I started doing comparisons between configuration of a pure Vista installation vs a Vista machine with SP1. I found that the schema had changed during the install, but something had been left out.&amp;nbsp; The schema file was updated to add the configurationHistory configuration section, but a corresponding section definition was not added to the applicationHost.config file.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Whether this was what was causing the problem or not, I knew this was going to cause a problem. I added the following configuration entry to the applicationHost.config file under the&amp;nbsp;section group for "system.applicationHost".&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" /&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;After this I started the WAS service, the World Wide Publishing Service and the IIS Admin Service. I opened up the IIS Management Console and everything was working just fine.&lt;/P&gt;
&lt;P&gt;I'm not sure what exactly happened during the SP1 upgrade that caused this file to not be updated, but I'm pleased to report that all things are up and running again.&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2636015" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/tobintitus/archive/tags/configuration/default.aspx">configuration</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/errors/default.aspx">errors</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/vista/default.aspx">vista</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/sp1/default.aspx">sp1</category><category domain="http://blogs.iis.net/tobintitus/archive/tags/iis+7.0/default.aspx">iis 7.0</category></item></channel></rss>