<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[22042] trunk: Make Multisite work when WordPress is installed in a subdirectory.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg > ul, #logmsg > ol { margin-left: 0; margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://core.trac.wordpress.org/changeset/22042">22042</a></dd>
<dt>Author</dt> <dd>markjaquith</dd>
<dt>Date</dt> <dd>2012-09-27 06:07:21 +0000 (Thu, 27 Sep 2012)</dd>
</dl>

<h3>Log Message</h3>
<pre>Make Multisite work when WordPress is installed in a subdirectory. You can now have WordPress Multisite as an SVN external or a Git submodule! props johnjamesjacoby, evansolomon, duck_, jakemgold, nacin, markjaquith. see <a href="http://core.trac.wordpress.org/ticket/19796">#19796</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkwpadminnetworksitenewphp">trunk/wp-admin/network/site-new.php</a></li>
<li><a href="#trunkwpadminnetworkphp">trunk/wp-admin/network.php</a></li>
<li><a href="#trunkwpincludesrewritephp">trunk/wp-includes/rewrite.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkwpadminnetworksitenewphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/network/site-new.php (22041 => 22042)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/network/site-new.php        2012-09-27 05:52:42 UTC (rev 22041)
+++ trunk/wp-admin/network/site-new.php        2012-09-27 06:07:21 UTC (rev 22042)
</span><span class="lines">@@ -62,10 +62,10 @@
</span><span class="cx"> 
</span><span class="cx">         if ( is_subdomain_install() ) {
</span><span class="cx">                 $newdomain = $domain . '.' . preg_replace( '|^www\.|', '', $current_site-&gt;domain );
</span><del>-                $path = $base;
</del><ins>+                $path      = $current_site-&gt;path;
</ins><span class="cx">         } else {
</span><span class="cx">                 $newdomain = $current_site-&gt;domain;
</span><del>-                $path = $base . $domain . '/';
</del><ins>+                $path      = $current_site-&gt;path . $domain . '/';
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         $password = 'N/A';
</span></span></pre></div>
<a id="trunkwpadminnetworkphp"></a>
<div class="modfile"><h4>Modified: trunk/wp-admin/network.php (22041 => 22042)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-admin/network.php        2012-09-27 05:52:42 UTC (rev 22041)
+++ trunk/wp-admin/network.php        2012-09-27 06:07:21 UTC (rev 22042)
</span><span class="lines">@@ -51,8 +51,8 @@
</span><span class="cx">  * @return bool Whether subdomain install is allowed
</span><span class="cx">  */
</span><span class="cx"> function allow_subdomain_install() {
</span><del>-        $domain = preg_replace( '|https?://([^/]+)|', '$1', get_option( 'siteurl' ) );
-        if( false !== strpos( $domain, '/' ) || 'localhost' == $domain || preg_match( '|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|', $domain ) )
</del><ins>+        $domain = preg_replace( '|https?://([^/]+)|', '$1', get_option( 'home' ) );
+        if( parse_url( get_option( 'home' ), PHP_URL_PATH ) || 'localhost' == $domain || preg_match( '|^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$|', $domain ) )
</ins><span class="cx">                 return false;
</span><span class="cx"> 
</span><span class="cx">         return true;
</span><span class="lines">@@ -144,13 +144,6 @@
</span><span class="cx"> function network_step1( $errors = false ) {
</span><span class="cx">         global $is_apache;
</span><span class="cx"> 
</span><del>-        if ( get_option( 'siteurl' ) != get_option( 'home' ) ) {
-                echo '&lt;div class=&quot;error&quot;&gt;&lt;p&gt;&lt;strong&gt;' . __('ERROR:') . '&lt;/strong&gt; ' . sprintf( __( 'Your &lt;strong&gt;WordPress address&lt;/strong&gt; must match your &lt;strong&gt;Site address&lt;/strong&gt; before creating a Network. See &lt;a href=&quot;%s&quot;&gt;General Settings&lt;/a&gt;.' ), esc_url( admin_url( 'options-general.php' ) ) ) . '&lt;/p&gt;&lt;/div&gt;';
-                echo '&lt;/div&gt;';
-                include ( ABSPATH . 'wp-admin/admin-footer.php' );
-                die();
-        }
-
</del><span class="cx">         if ( defined('DO_NOT_UPGRADE_GLOBAL_TABLES') ) {
</span><span class="cx">                 echo '&lt;div class=&quot;error&quot;&gt;&lt;p&gt;&lt;strong&gt;' . __('ERROR:') . '&lt;/strong&gt; ' . __( 'The constant DO_NOT_UPGRADE_GLOBAL_TABLES cannot be defined when creating a network.' ) . '&lt;/p&gt;&lt;/div&gt;';
</span><span class="cx">                 echo '&lt;/div&gt;';
</span><span class="lines">@@ -314,11 +307,14 @@
</span><span class="cx">  * @since 3.0.0
</span><span class="cx">  */
</span><span class="cx"> function network_step2( $errors = false ) {
</span><del>-        global $base, $wpdb;
-        $hostname = get_clean_basedomain();
</del><ins>+        global $wpdb;
</ins><span class="cx"> 
</span><del>-        if ( ! isset( $base ) )
-                $base = trailingslashit( stripslashes( dirname( dirname( $_SERVER['SCRIPT_NAME'] ) ) ) );
</del><ins>+        $hostname          = get_clean_basedomain();
+        $slashed_home      = trailingslashit( get_option( 'home' ) );
+        $base              = parse_url( $slashed_home, PHP_URL_PATH );
+        $wp_dir_from_root  = preg_replace( '#^' . preg_quote( $_SERVER['DOCUMENT_ROOT'], '#' ) . '#', '', ABSPATH );
+        $wp_siteurl_subdir = trailingslashit( '/' . preg_replace( '#^' . preg_quote( $base, '#' ) . '#', '', $wp_dir_from_root ) );
+        $rewrite_base      = ! empty( $wp_siteurl_subdir ) ? ltrim( trailingslashit( $wp_siteurl_subdir ), '/' ) : '';
</ins><span class="cx"> 
</span><span class="cx">         // Wildcard DNS message.
</span><span class="cx">         if ( is_wp_error( $errors ) )
</span><span class="lines">@@ -344,6 +340,10 @@
</span><span class="cx">                 }
</span><span class="cx">         }
</span><span class="cx"> 
</span><ins>+        $subdir_match        = $subdomain_install ? '' : '([_0-9a-zA-Z-]+/)?';
+        $subdir_replacement_01 = $subdomain_install ? '' : '$1';
+        $subdir_replacement_12 = $subdomain_install ? '$1' : '$2';
+
</ins><span class="cx">         if ( $_POST || ! is_multisite() ) {
</span><span class="cx"> ?&gt;
</span><span class="cx">                 &lt;h3&gt;&lt;?php esc_html_e( 'Enabling the Network' ); ?&gt;&lt;/h3&gt;
</span><span class="lines">@@ -361,20 +361,21 @@
</span><span class="cx"> ?&gt;
</span><span class="cx">                 &lt;ol&gt;
</span><span class="cx">                         &lt;li&gt;&lt;p&gt;&lt;?php printf( __( 'Add the following to your &lt;code&gt;wp-config.php&lt;/code&gt; file in &lt;code&gt;%s&lt;/code&gt; &lt;strong&gt;above&lt;/strong&gt; the line reading &lt;code&gt;/* That&amp;#8217;s all, stop editing! Happy blogging. */&lt;/code&gt;:' ), ABSPATH ); ?&gt;&lt;/p&gt;
</span><del>-                                &lt;textarea class=&quot;code&quot; readonly=&quot;readonly&quot; cols=&quot;100&quot; rows=&quot;7&quot;&gt;
</del><ins>+                                &lt;textarea class=&quot;code&quot; readonly=&quot;readonly&quot; cols=&quot;100&quot; rows=&quot;6&quot;&gt;
</ins><span class="cx"> define('MULTISITE', true);
</span><span class="cx"> define('SUBDOMAIN_INSTALL', &lt;?php echo $subdomain_install ? 'true' : 'false'; ?&gt;);
</span><del>-$base = '&lt;?php echo $base; ?&gt;';
</del><span class="cx"> define('DOMAIN_CURRENT_SITE', '&lt;?php echo $hostname; ?&gt;');
</span><span class="cx"> define('PATH_CURRENT_SITE', '&lt;?php echo $base; ?&gt;');
</span><span class="cx"> define('SITE_ID_CURRENT_SITE', 1);
</span><del>-define('BLOG_ID_CURRENT_SITE', 1);&lt;/textarea&gt;
</del><ins>+define('BLOG_ID_CURRENT_SITE', 1);
+&lt;/textarea&gt;
</ins><span class="cx"> &lt;?php
</span><span class="cx">         $keys_salts = array( 'AUTH_KEY' =&gt; '', 'SECURE_AUTH_KEY' =&gt; '', 'LOGGED_IN_KEY' =&gt; '', 'NONCE_KEY' =&gt; '', 'AUTH_SALT' =&gt; '', 'SECURE_AUTH_SALT' =&gt; '', 'LOGGED_IN_SALT' =&gt; '', 'NONCE_SALT' =&gt; '' );
</span><span class="cx">         foreach ( $keys_salts as $c =&gt; $v ) {
</span><span class="cx">                 if ( defined( $c ) )
</span><span class="cx">                         unset( $keys_salts[ $c ] );
</span><span class="cx">         }
</span><ins>+
</ins><span class="cx">         if ( ! empty( $keys_salts ) ) {
</span><span class="cx">                 $keys_salts_str = '';
</span><span class="cx">                 $from_api = wp_remote_get( 'https://api.wordpress.org/secret-key/1.1/salt/' );
</span><span class="lines">@@ -399,10 +400,13 @@
</span><span class="cx"> &lt;/li&gt;
</span><span class="cx"> &lt;?php
</span><span class="cx">         if ( iis7_supports_permalinks() ) :
</span><ins>+                // IIS doesn't support RewriteBase, all your RewriteBase are belong to us
+                $iis_subdir_match = ltrim( $base, '/' ) . $subdir_match;
+                $iis_rewrite_base = ltrim( $base, '/' ) . $rewrite_base;
+                $iis_subdir_replacement = $subdomain_install ? '' : '{R:1}';
</ins><span class="cx"> 
</span><del>-                        if ( $subdomain_install ) {
-                                $web_config_file =
-'&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
</del><ins>+                $web_config_file = &lt;&lt;&lt;EOF
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
</ins><span class="cx"> &lt;configuration&gt;
</span><span class="cx">     &lt;system.webServer&gt;
</span><span class="cx">         &lt;rewrite&gt;
</span><span class="lines">@@ -414,51 +418,16 @@
</span><span class="cx">                                 if ( is_multisite() &amp;&amp; get_site_option( 'ms_files_rewriting' ) ) {
</span><span class="cx">                                         $web_config_file .= '
</span><span class="cx">                 &lt;rule name=&quot;WordPress Rule for Files&quot; stopProcessing=&quot;true&quot;&gt;
</span><del>-                    &lt;match url=&quot;^files/(.+)&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;action type=&quot;Rewrite&quot; url=&quot;wp-includes/ms-files.php?file={R:1}&quot; appendQueryString=&quot;false&quot; /&gt;
</del><ins>+                    &lt;match url=&quot;^{$iis_subdir_match}files/(.+)&quot; ignoreCase=&quot;false&quot; /&gt;
+                    &lt;action type=&quot;Rewrite&quot; url=&quot;{$iis_rewrite_base}wp-includes/ms-files.php?file={R:1}&quot; appendQueryString=&quot;false&quot; /&gt;
</ins><span class="cx">                 &lt;/rule&gt;';
</span><span class="cx">                 }
</span><span class="cx">                 $web_config_file .= '
</span><span class="cx">                 &lt;rule name=&quot;WordPress Rule 2&quot; stopProcessing=&quot;true&quot;&gt;
</span><del>-                    &lt;match url=&quot;^&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;conditions logicalGrouping=&quot;MatchAny&quot;&gt;
-                        &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; ignoreCase=&quot;false&quot; /&gt;
-                        &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsDirectory&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;/conditions&gt;
-                    &lt;action type=&quot;None&quot; /&gt;
</del><ins>+                    &lt;match url=&quot;^{$iis_subdir_match}wp-admin$&quot; ignoreCase=&quot;false&quot; /&gt;
+                    &lt;action type=&quot;Redirect&quot; url=&quot;{$iis_subdir_replacement}wp-admin/&quot; redirectType=&quot;Permanent&quot; /&gt;
</ins><span class="cx">                 &lt;/rule&gt;
</span><span class="cx">                 &lt;rule name=&quot;WordPress Rule 3&quot; stopProcessing=&quot;true&quot;&gt;
</span><del>-                    &lt;match url=&quot;.&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot; /&gt;
-                &lt;/rule&gt;
-            &lt;/rules&gt;
-        &lt;/rewrite&gt;
-    &lt;/system.webServer&gt;
-&lt;/configuration&gt;';
-                        } else {
-                                $web_config_file =
-'&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;configuration&gt;
-    &lt;system.webServer&gt;
-        &lt;rewrite&gt;
-            &lt;rules&gt;
-                &lt;rule name=&quot;WordPress Rule 1&quot; stopProcessing=&quot;true&quot;&gt;
-                    &lt;match url=&quot;^index\.php$&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;action type=&quot;None&quot; /&gt;
-                &lt;/rule&gt;';
-                                if ( is_multisite() &amp;&amp; get_site_option( 'ms_files_rewriting' ) ) {
-                                        $web_config_file .= '
-                &lt;rule name=&quot;WordPress Rule for Files&quot; stopProcessing=&quot;true&quot;&gt;
-                    &lt;match url=&quot;^files/(.+)&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;action type=&quot;Rewrite&quot; url=&quot;wp-includes/ms-files.php?file={R:1}&quot; appendQueryString=&quot;false&quot; /&gt;
-                &lt;/rule&gt;';
-                }
-                $web_config_file .= '
-                &lt;rule name=&quot;WordPress Rule 2&quot; stopProcessing=&quot;true&quot;&gt;
-                    &lt;match url=&quot;^([_0-9a-zA-Z-]+/)?wp-admin$&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;action type=&quot;Redirect&quot; url=&quot;{R:1}wp-admin/&quot; redirectType=&quot;Permanent&quot; /&gt;
-                &lt;/rule&gt;
-                &lt;rule name=&quot;WordPress Rule 3&quot; stopProcessing=&quot;true&quot;&gt;
</del><span class="cx">                     &lt;match url=&quot;^&quot; ignoreCase=&quot;false&quot; /&gt;
</span><span class="cx">                     &lt;conditions logicalGrouping=&quot;MatchAny&quot;&gt;
</span><span class="cx">                         &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; ignoreCase=&quot;false&quot; /&gt;
</span><span class="lines">@@ -467,12 +436,12 @@
</span><span class="cx">                     &lt;action type=&quot;None&quot; /&gt;
</span><span class="cx">                 &lt;/rule&gt;
</span><span class="cx">                 &lt;rule name=&quot;WordPress Rule 4&quot; stopProcessing=&quot;true&quot;&gt;
</span><del>-                    &lt;match url=&quot;^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*)&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;action type=&quot;Rewrite&quot; url=&quot;{R:1}&quot; /&gt;
</del><ins>+                    &lt;match url=&quot;^{$iis_subdir_match}(wp-(content|admin|includes).*)&quot; ignoreCase=&quot;false&quot; /&gt;
+                    &lt;action type=&quot;Rewrite&quot; url=&quot;{$iis_rewrite_base}{R:1}&quot; /&gt;
</ins><span class="cx">                 &lt;/rule&gt;
</span><span class="cx">                 &lt;rule name=&quot;WordPress Rule 5&quot; stopProcessing=&quot;true&quot;&gt;
</span><del>-                    &lt;match url=&quot;^([_0-9a-zA-Z-]+/)?(.*\.php)$&quot; ignoreCase=&quot;false&quot; /&gt;
-                    &lt;action type=&quot;Rewrite&quot; url=&quot;{R:2}&quot; /&gt;
</del><ins>+                    &lt;match url=&quot;^{$iis_subdir_match}([_0-9a-zA-Z-]+/)?(.*\.php)$&quot; ignoreCase=&quot;false&quot; /&gt;
+                    &lt;action type=&quot;Rewrite&quot; url=&quot;{$iis_rewrite_base}{R:2}&quot; /&gt;
</ins><span class="cx">                 &lt;/rule&gt;
</span><span class="cx">                 &lt;rule name=&quot;WordPress Rule 6&quot; stopProcessing=&quot;true&quot;&gt;
</span><span class="cx">                     &lt;match url=&quot;.&quot; ignoreCase=&quot;false&quot; /&gt;
</span><span class="lines">@@ -481,10 +450,11 @@
</span><span class="cx">             &lt;/rules&gt;
</span><span class="cx">         &lt;/rewrite&gt;
</span><span class="cx">     &lt;/system.webServer&gt;
</span><del>-&lt;/configuration&gt;';
-                        }
</del><ins>+&lt;/configuration&gt;
+EOF;
+
</ins><span class="cx">         ?&gt;
</span><del>-                &lt;li&gt;&lt;p&gt;&lt;?php printf( __( 'Add the following to your &lt;code&gt;web.config&lt;/code&gt; file in &lt;code&gt;%s&lt;/code&gt;, replacing other WordPress rules:' ), ABSPATH ); ?&gt;&lt;/p&gt;
</del><ins>+                &lt;li&gt;&lt;p&gt;&lt;?php printf( __( 'Add the following to your &lt;code&gt;web.config&lt;/code&gt; file in &lt;code&gt;%s&lt;/code&gt;, replacing other WordPress rules:' ), trailingslashit( str_replace( trailingslashit( $wp_siteurl_subdir ), '', ABSPATH ) ) ); ?&gt;&lt;/p&gt;
</ins><span class="cx">                 &lt;?php
</span><span class="cx">                 if ( ! $subdomain_install &amp;&amp; WP_CONTENT_DIR != ABSPATH . 'wp-content' )
</span><span class="cx">                         echo '&lt;p&gt;&lt;strong&gt;' . __('Warning:') . ' ' . __( 'Subdirectory networks may not be fully compatible with custom wp-content directories.' ) . '&lt;/strong&gt;&lt;/p&gt;';
</span><span class="lines">@@ -495,28 +465,28 @@
</span><span class="cx"> 
</span><span class="cx">         &lt;?php else : // end iis7_supports_permalinks(). construct an htaccess file instead:
</span><span class="cx"> 
</span><del>-                $htaccess_file = 'RewriteEngine On
-RewriteBase ' . $base . '
-RewriteRule ^index\.php$ - [L]' . &quot;\n&quot;;
-
</del><ins>+                $ms_files_rewriting = '';
</ins><span class="cx">                 if ( is_multisite() &amp;&amp; get_site_option( 'ms_files_rewriting' ) ) {
</span><del>-                        $htaccess_file .= &quot;\n# uploaded files\nRewriteRule ^&quot;;
-                        $htaccess_file .= ( $subdomain_install ? '' : '([_0-9a-zA-Z-]+/)?' ) . 'files/(.+) wp-includes/ms-files.php?file=$' . ( $subdomain_install ? 1 : 2 ) . ' [L]' . &quot;\n&quot;;
</del><ins>+                        $ms_files_rewriting = &quot;\n# uploaded files\nRewriteRule ^&quot;;
+                        $ms_files_rewriting .= $subdir_match . &quot;files/(.+) {$rewrite_base}wp-includes/ms-files.php?file={$subdir_replacement_12} [L]&quot; . &quot;\n&quot;;
</ins><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                if ( ! $subdomain_install )
-                        $htaccess_file .= &quot;\n# add a trailing slash to /wp-admin\n&quot; . 'RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]' . &quot;\n&quot;;
</del><ins>+                $htaccess_file = &lt;&lt;&lt;EOF
+RewriteEngine On
+RewriteBase {$base}
+RewriteRule ^index\.php$ - [L]
+{$ms_files_rewriting}
+# add a trailing slash to /wp-admin
+RewriteRule ^{$subdir_match}wp-admin$ {$subdir_replacement_01}wp-admin/ [R=301,L]
</ins><span class="cx"> 
</span><del>-                $htaccess_file .= &quot;\n&quot; . 'RewriteCond %{REQUEST_FILENAME} -f [OR]
</del><ins>+RewriteCond %{REQUEST_FILENAME} -f [OR]
</ins><span class="cx"> RewriteCond %{REQUEST_FILENAME} -d
</span><del>-RewriteRule ^ - [L]';
</del><ins>+RewriteRule ^ - [L]
+RewriteRule ^{$subdir_match}(wp-(content|admin|includes).*) {$rewrite_base}{$subdir_replacement_12} [L]
+RewriteRule ^{$subdir_match}(.*\.php)$ {$rewrite_base}$subdir_replacement_12 [L]
+RewriteRule . index.php [L]
+EOF;
</ins><span class="cx"> 
</span><del>-                // @todo custom content dir.
-                if ( ! $subdomain_install )
-                        $htaccess_file .= &quot;\nRewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]\nRewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]&quot;;
-
-                $htaccess_file .= &quot;\nRewriteRule . index.php [L]&quot;;
-
</del><span class="cx">                 ?&gt;
</span><span class="cx">                 &lt;li&gt;&lt;p&gt;&lt;?php printf( __( 'Add the following to your &lt;code&gt;.htaccess&lt;/code&gt; file in &lt;code&gt;%s&lt;/code&gt;, replacing other WordPress rules:' ), ABSPATH ); ?&gt;&lt;/p&gt;
</span><span class="cx">                 &lt;?php
</span><span class="lines">@@ -537,14 +507,12 @@
</span><span class="cx"> 
</span><span class="cx"> if ( $_POST ) {
</span><span class="cx"> 
</span><del>-        $base = trailingslashit( stripslashes( dirname( dirname( $_SERVER['SCRIPT_NAME'] ) ) ) );
-
</del><span class="cx">         check_admin_referer( 'install-network-1' );
</span><span class="cx"> 
</span><span class="cx">         require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
</span><span class="cx">         // create network tables
</span><span class="cx">         install_network();
</span><del>-        $hostname = get_clean_basedomain();
</del><ins>+        $base              = parse_url( trailingslashit( get_option( 'home' ) ), PHP_URL_PATH );
</ins><span class="cx">         $subdomain_install = allow_subdomain_install() ? !empty( $_POST['subdomain_install'] ) : false;
</span><span class="cx">         if ( ! network_domain_check() ) {
</span><span class="cx">                 $result = populate_network( 1, get_clean_basedomain(), sanitize_email( $_POST['email'] ), stripslashes( $_POST['sitename'] ), $base, $subdomain_install );
</span></span></pre></div>
<a id="trunkwpincludesrewritephp"></a>
<div class="modfile"><h4>Modified: trunk/wp-includes/rewrite.php (22041 => 22042)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/wp-includes/rewrite.php        2012-09-27 05:52:42 UTC (rev 22041)
+++ trunk/wp-includes/rewrite.php        2012-09-27 06:07:21 UTC (rev 22042)
</span><span class="lines">@@ -1729,83 +1729,17 @@
</span><span class="cx">                 &lt;rewrite&gt;
</span><span class="cx">                         &lt;rules&gt;';
</span><span class="cx">                 }
</span><del>-                if ( !is_multisite() ) {
-                        $rules .= '
-                                &lt;rule name=&quot;wordpress&quot; patternSyntax=&quot;Wildcard&quot;&gt;
-                                        &lt;match url=&quot;*&quot; /&gt;
-                                                &lt;conditions&gt;
-                                                        &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; negate=&quot;true&quot; /&gt;
-                                                        &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsDirectory&quot; negate=&quot;true&quot; /&gt;
-                                                &lt;/conditions&gt;
-                                        &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot; /&gt;
-                                &lt;/rule&gt;';
-                } else {
-                        if (is_subdomain_install()) {
-                                $rules .= '
-                                &lt;rule name=&quot;WordPress Rule 1&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^index\.php$&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;None&quot; /&gt;
-                                &lt;/rule&gt;';
-                                if ( get_site_option( 'ms_files_rewriting' ) ) {
-                                        $rules .= '
-                                &lt;rule name=&quot;WordPress Rule for Files&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^files/(.+)&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;Rewrite&quot; url=&quot;wp-includes/ms-files.php?file={R:1}&quot; appendQueryString=&quot;false&quot; /&gt;
-                                &lt;/rule&gt;';
-                                }
-                                $rules .= '
-                                &lt;rule name=&quot;WordPress Rule 2&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;conditions logicalGrouping=&quot;MatchAny&quot;&gt;
-                                                &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; ignoreCase=&quot;false&quot; /&gt;
-                                                &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsDirectory&quot; ignoreCase=&quot;false&quot; /&gt;
</del><ins>+
+                $rules .= '
+                        &lt;rule name=&quot;wordpress&quot; patternSyntax=&quot;Wildcard&quot;&gt;
+                                &lt;match url=&quot;*&quot; /&gt;
+                                        &lt;conditions&gt;
+                                                &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; negate=&quot;true&quot; /&gt;
+                                                &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsDirectory&quot; negate=&quot;true&quot; /&gt;
</ins><span class="cx">                                         &lt;/conditions&gt;
</span><del>-                                        &lt;action type=&quot;None&quot; /&gt;
-                                &lt;/rule&gt;
-                                &lt;rule name=&quot;WordPress Rule 3&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;.&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot; /&gt;
-                                &lt;/rule&gt;';
-                        } else {
-                                $rules .= '
-                                &lt;rule name=&quot;WordPress Rule 1&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^index\.php$&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;None&quot; /&gt;
-                                &lt;/rule&gt;';
-                                if ( get_site_option( 'ms_files_rewriting' ) ) {
-                                        $rules .= '
-                                &lt;rule name=&quot;WordPress Rule for Files&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^([_0-9a-zA-Z-]+/)?files/(.+)&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;Rewrite&quot; url=&quot;wp-includes/ms-files.php?file={R:2}&quot; appendQueryString=&quot;false&quot; /&gt;
-                                &lt;/rule&gt;';
-                                }
-                                $rules .= '
-                                &lt;rule name=&quot;WordPress Rule 2&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^([_0-9a-zA-Z-]+/)?wp-admin$&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;Redirect&quot; url=&quot;{R:1}wp-admin/&quot; redirectType=&quot;Permanent&quot; /&gt;
-                                &lt;/rule&gt;
-                                &lt;rule name=&quot;WordPress Rule 3&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;conditions logicalGrouping=&quot;MatchAny&quot;&gt;
-                                                &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsFile&quot; ignoreCase=&quot;false&quot; /&gt;
-                                                &lt;add input=&quot;{REQUEST_FILENAME}&quot; matchType=&quot;IsDirectory&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;/conditions&gt;
-                                        &lt;action type=&quot;None&quot; /&gt;
-                                &lt;/rule&gt;
-                                &lt;rule name=&quot;WordPress Rule 4&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;Rewrite&quot; url=&quot;{R:1}&quot; /&gt;
-                                &lt;/rule&gt;
-                                &lt;rule name=&quot;WordPress Rule 5&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;^([_0-9a-zA-Z-]+/)?(.*\.php)$&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;Rewrite&quot; url=&quot;{R:2}&quot; /&gt;
-                                &lt;/rule&gt;
-                                &lt;rule name=&quot;WordPress Rule 6&quot; stopProcessing=&quot;true&quot;&gt;
-                                        &lt;match url=&quot;.&quot; ignoreCase=&quot;false&quot; /&gt;
-                                        &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot; /&gt;
-                                &lt;/rule&gt;';
-                        }
-                }
</del><ins>+                                &lt;action type=&quot;Rewrite&quot; url=&quot;index.php&quot; /&gt;
+                        &lt;/rule&gt;';
+
</ins><span class="cx">                 if ( $add_parent_tags ) {
</span><span class="cx">                         $rules .= '
</span><span class="cx">                         &lt;/rules&gt;
</span></span></pre>
</div>
</div>

</body>
</html>