Storing URL rewrite mappings in a separate file

When using rewrite maps in IIS URL Rewrite it is very common to have a very large number of entries in a rewrite map. In order to avoid cluttering the configuration file – web.config – with this configuration data the rewrite maps can be defined in a separate configuration file. That file can then be referenced from the web.config file. This post provides an example of how this can be done.

Create a file called rewritemaps.config in the same directory where web.config file is. Open that file in notepad and add the following:

<rewriteMaps>
  <rewriteMap name="Redirects">
    <add key="/oldurl" value="/newurl" />
    <add key="/otheroldurl" value="/othernewurl" />
  </rewriteMap>
</rewriteMaps>

Save this file and then open web.config file in notepad. In the web.config file add the following inside of the <rewrite> section:

<rewriteMaps configSource="rewritemaps.config" />

The configSource attribute tells IIS configuration that the <rewriteMaps> section is defined in a separate file rewritemaps.config. This referenced section can be now uses as if it was defined in the same web.config file. Also, the IIS Manager UI will work well with this referenced file: when you modify or add entries to the rewrite map they will be stored in the rewritemaps.config file.

Here is a complete example web.config file that uses the rewrite map from referenced configuration file:

<configuration>
<system.webServer>
  <rewrite>
    <rewriteMaps configSource="rewritemaps.config"><rewriteMaps>
    <rules>
      <rule name="Redirect rule1 for Redirects">
        <match url=".*" />
        <conditions>
          <add input="{Redirects:{REQUEST_URI}}" pattern="(.+)" />
        </conditions>
        <action type="Redirect" url="{C:1}" appendQueryString="false" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>
</configuration>

The same approach can be used for storing rewrite rules in a separate configuration file, e.g.:

<rules configSource="rewriteRules.config" />

Slides and Questions from PHP on Windows Webcast

On April 9, Mark Brown and I did a PHP|Architect webcast “PHP Performance On Windows”. The slides from the presentation have been published at the following link:

PHP Performance on Windows – slides

There were a number of question at the end of the webcast that we did not get to answer due to lack of time. This blog post provides answers to those questions.

Continue reading “Slides and Questions from PHP on Windows Webcast”

PHP on IIS: MonitorChangesTo setting in FastCGI

PHP on Windows loads its configuration file php.ini during the startup of the process php-cgi.exe. When PHP is run on IIS via FastCGI the php-cgi.exe processes are re-used to handle many requests. If configuration settings in php.ini file get updated, those changes will not be picked up by php-cgi.exe processes until the processes are recycled or restarted by IIS FastCGI module. This means that any time you change the PHP configuration you have to manually recycle IIS Application Pools that use PHP. This post explains how to configure FastCGI in IIS so that PHP configuration changes take effect right away without the need to manually recycle or restart the IIS Application Pools.

Continue reading “PHP on IIS: MonitorChangesTo setting in FastCGI”

IIS URL Rewrite 2.0 – Release to Web

The IIS URL Rewrite Module 2.0 – RTW is available for download. IIS URL Rewrite v2.0 is an incremental release that includes all the features from version 1.1, and adds extensibility support and outbound response rewriting. More specifically, v2.0 can be used to:

  • Express complex URL rewriting logic by using custom rewrite providers written in .NET.
  • Replace the URLs generated by a web application in the response HTML with a more user friendly and search engine friendly equivalent
  • Fix up the content of any HTTP response by using regular expression pattern matching.
  • Modify HTTP request and response headers and IIS server variables.

For the complete list of features available in this version, refer to Using URL Rewrite Module 2.0.

Install the URL Rewrite 2.0 – RTW

To install the URL Rewrite 2.0, use the download links at the module’s home page at http://www.iis.net/expand/urlrewrite. Note that this is a final, production ready release that is officially supported by Microsoft.

Upgrade notes:

  • If a previous version of URL Rewrite Module, such as v1.0 and v1.1, is already installed then it will be upgraded to the v2.0;
  • If an RC version of the URL Rewrite Module 2.0 is already installed, then it will be upgraded to RTW version.

Install the URL Rewrite Extensibility Samples

An important new feature in this release is the support for custom rewrite providers that can be written in .NET. Custom rewrite providers can be used to implement complex rewrite logic which cannot be expressed by using built-in rewriting functionality.

The URL Rewrite Extensibility Samples include the .NET assemblies and the source code implementing the following providers:

  • DbProvider – this provider can be used to retrieve rewrite mappings from a SQL Server database table by executing a stored procedure;
  • FileMapProvider – this provider can be used to retrieve rewrite mappings stored in a text file;
  • FileContainsProvider – this provider can be used to check if any string in a text file is a substring of the provider’s input string.

Download the URL Rewrite Extensibility Samples from MSDN Code Gallery.

More Information

The following documentation about URL Rewrite 2.0 is available on IIS.net:

Also, visit the URL Rewrite Forum on IIS.NET if you have run into any problems when using the module or have questions or suggestions.

Important update for IIS 7.0 FastCGI module

FastCGI module in IIS 7.0 has been lacking some of the features and bug fixes that are available in IIS 7.5 FastCGI module and in FastCGI Extension 1.5 on IIS 5.1 and IIS 6.0. The reason why this happened are explained in the post about FastCGI Module: Differences across IIS versions. This week IIS team has released an update for FastCGI module in IIS 7.0 that closes this remaining feature gap and ensures that FastCGI functionality is consistent across all versions of IIS.

The update can be downloaded from the following locations:

The features that are enabled by this update:

Continue reading “Important update for IIS 7.0 FastCGI module”

Make WordPress faster on IIS with WinCache 1.1

This post used to contain PHP code for object-cache.php file. This code has been removed because it is out of date and has bugs. Instead, the latest version of WinCache Object Cache plugin from wordpress.org should be used.

This post explains how to improve performance of WordPress on Windows by using the WinCache Extension 1.1 – Beta for PHP. You probably already know that just by enabling the WinCache extension and without any code changes it is possible to get a significant increase in WordPress performance – this is described in details in PHP on Windows: The WinCache 1.0 Benchmark. But this can be taken even further by using the user cache API’s available in WinCache 1.1 release.

Continue reading “Make WordPress faster on IIS with WinCache 1.1”

More Performance Improvements in WinCache 1.1

Since the WinCache Extension for PHP has been released last year it has been widely deployed by customers who run PHP on Windows OS and it has proven to provide a substantial performance boost for PHP applications hosted on Windows-based web servers.

Today IIS team has published a beta of WinCache 1.1, which provides more options for improving performance of PHP applications on Windows. Specifically, the new version includes :

  • User Cache API’s, that can be used by PHP scripts to store PHP objects and variables in shared memory. This way PHP scripts may improve the execution speed by storing processed data in the cache and then using it in subsequent requests instead of re-creating the data on every request. The addition of these API’s closes the remaining feature gap that WinCache had when compared with other similar caching solutions like APC and XCache.
  • WinCache Session Handler, that can be used to configure PHP to store the session data in shared memory cache. Using shared memory instead of the default file session storage helps improve performance of PHP applications that store large amount of data in session objects.

The beta builds of the extension can be downloaded and installed from the extension home page at: http://www.iis.net/expand/wincacheforphp (look for the “WinCache 1.1 – Beta” section there). The source code can be obtained from http://pecl.php.net/package/WinCache/1.1.0. The documentation for the extension can be found on PHP.NET WinCache documentation.

This is the beta release and the WinCache team is looking for your feedback on new features and functionality. Use the WinCache Community Forum to ask questions about the extension, report bugs and problems and to suggest features and improvements.

FastCGI Module: Differences across IIS versions

The information in this post is not applicable anymore because the update for FastCGI module in IIS 7.0 has been made available, so now the functionality and features of FastCGI are consistent across all IIS versions. Read the release announcement to get more details about the update.

Recent release of FastCGI Extension 1.5 for IIS 6.0 and IIS 5.1 has several new features and improvements that make it easier to run PHP on Windows and IIS. However, all the new features are only available when using Windows XP or Windows Server 2003. FastCGI module on IIS 7.5 in Windows 7 and Windows Server 2008 R2 supports most of these features. FastCGI module on IIS 7 in Windows Vista and Windows Server 2008 does not support those new features yet. The reasons why this happens and the plan for updating FastCGI functionality across all platforms are explained in this post.

Continue reading “FastCGI Module: Differences across IIS versions”

WinCache Extension 1.0.1 – Servicing Release

The new release of WinCache Extension for PHP – version 1.0.1 – is available for download. This is a servicing release that has fixes for bugs reported in v1.0. In particular the following fixes and changes have been made in this release:

  • Fixed require_once on PHP5.3. If the files were absolute and similar files were included in different case, require_once was including it twice.
  • Changed relative path cache to act as resolve path cache. Incremented refcounts under aplist lock. Did comparison using InterlockedCompareExchange.
  • Fixed crashes which were happening because aplist refcount and opcode cache refcount can get out of sync due to local cache.
  • Exposed is_local_cache property from ocache_fileinfo and fcache_fileinfo. Stats page will use this to indicate when local opcode data is shown.
  • Updated the wincache.php to pass chart data on query string to ensure that the charts show the same data that is displayed in tables
  • Updated the wincache.php to show whether information about a global or local cache instance is being displayed
  • Changed variable names and comments to indicate rplist is resolve path cache and not just relative path cache
  • Changed wincache.php to use resolve_path instead of relative_path

The new release is available for download from the extension’s home page at: http://www.iis.net/expand/wincacheforphp. The source code for the extension is available on PHP PECL page here: http://pecl.php.net/package/WinCache/1.0.1. The documenation for the extension can be found at http://www.php.net/manual/en/book.wincache.php.

FastCGI Extension 1.5 for IIS 5.1 and IIS 6.0 – RTW

Today IIS team has released to web the FastCGI Extension 1.5 for IIS 6.0 and IIS 5.1. This version is based on FastCGI Extension 1.0 and it adds several important improvements and features. This is a production ready release that is officially supported by Microsoft.

Install FastCGI Extension 1.5 for IIS 6.0 and IIS 5.1

To install the FastCGI Extension 1.5 use the download links at the extension’s home page at http://www.iis.net/expand/fastcgi.

Note: If you already have FastCGI v1.0, v1.5 Beta or v1.5 RC installed, then the installation package will upgrade it to version 1.5 – RTW. All the related IIS configuration and settings in fcgiext.ini file will be preserved during upgrade. Note that during upgrade from v1.0 the comments in fcgiext.ini will not be updated and will not mention new configuration settings. However the new settings can still be used after upgrade.

Continue reading “FastCGI Extension 1.5 for IIS 5.1 and IIS 6.0 – RTW”