+ /**
+ * Retrieve IIS7 URL Rewrite formatted rewrite rules to write to web.config file.
+ *
+ * Does not actually write to the web.config file, but creates the rules for
+ * the process that will.
+ *
+ * @since 2.8.0
+ * @access public
+ *
+ * @return string
+ */
+ function iis7_url_rewrite_rules( $add_parent_tags = false ) {
+
+ if ( ! $this->using_permalinks() )
+ return '';
+ $rules = '';
+ if ( $add_parent_tags ) {
+ $rules .= '<configuration>
+ <system.webServer>
+ <rewrite>
+ <rules>';
+ }
+ if ( !is_multisite() ) {
+ $rules .= '
+ <rule name="wordpress" patternSyntax="Wildcard">
+ <match url="*" />
+ <conditions>
+ <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
+ <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
+ </conditions>
+ <action type="Rewrite" url="index.php" />
+ </rule>';
+ } else {
+ if (is_subdomain_install()) {
+ $rules .= '
+ <rule name="wordpress - Rule 1" stopProcessing="true">
+ <match url="^index\.php$" ignoreCase="false" />
+ <action type="None" />
+ </rule>
+ <rule name="wordpress - Rule 2" stopProcessing="true">
+ <match url="^files/(.+)" ignoreCase="false" />
+ <action type="Rewrite" url="wp-includes/ms-files.php?file={R:1}" appendQueryString="false" />
+ </rule>
+ <rule name="wordpress - Rule 3" stopProcessing="true">
+ <match url="^" ignoreCase="false" />
+ <conditions logicalGrouping="MatchAny">
+ <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
+ <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
+ </conditions>
+ <action type="None" />
+ </rule>
+ <rule name="wordpress - Rule 4" stopProcessing="true">
+ <match url="." ignoreCase="false" />
+ <action type="Rewrite" url="index.php" />
+ </rule>';
+ } else {
+ $rules .= '
+ <rule name="wordpress - Rule 1" stopProcessing="true">
+ <match url="^index\.php$" ignoreCase="false" />
+ <action type="None" />
+ </rule>
+ <rule name="wordpress - Rule 2" stopProcessing="true">
+ <match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
+ <action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
+ </rule>
+ <rule name="wordpress - Rule 3" stopProcessing="true">
+ <match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
+ <action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
+ </rule>
+ <rule name="wordpress - Rule 4" stopProcessing="true">
+ <match url="^" ignoreCase="false" />
+ <conditions logicalGrouping="MatchAny">
+ <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
+ <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
+ </conditions>
+ <action type="None" />
+ </rule>
+ <rule name="wordpress - Rule 5" stopProcessing="true">
+ <match url="^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)" ignoreCase="false" />
+ <action type="Rewrite" url="{R:2}" />
+ </rule>
+ <rule name="wordpress - Rule 6" stopProcessing="true">
+ <match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
+ <action type="Rewrite" url="{R:2}" />
+ </rule>
+ <rule name="wordpress - Rule 7" stopProcessing="true">
+ <match url="." ignoreCase="false" />
+ <action type="Rewrite" url="index.php" />
+ </rule>';
+ }
+ }
+ if ( $add_parent_tags ) {
+ $rules .= '
+ </rules>
+ </rewrite>
+ </system.webServer>
+</configuration>';
+ }
+
+ $rules = apply_filters('iis7_url_rewrite_rules', $rules);
+
+ return $rules;
+ }
+
+ /**
+ * Add a straight rewrite rule.
+ *
+ * Any value in the $after parameter that isn't 'bottom' will be placed at
+ * the top of the rules.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param string $regex Regular expression to match against request.
+ * @param string $redirect URL regex redirects to when regex matches request.
+ * @param string $after Optional, default is bottom. Location to place rule.
+ */