update rewrite rules for IIS, props Frumph, see #12758

git-svn-id: http://svn.automattic.com/wordpress/trunk@14871 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
wpmuguru 2010-05-25 05:12:47 +00:00
parent 5c5a6d4d73
commit 6eb9b64e22
3 changed files with 183 additions and 87 deletions

View File

@ -336,35 +336,119 @@ define( 'BLOG_ID_CURRENT_SITE', 1 );</textarea>
?> ?>
</li> </li>
<?php <?php
// Construct an htaccess file. if (iis7_supports_permalinks()) {
$htaccess_file = 'RewriteEngine On if (is_subdomain_install()) {
RewriteBase ' . $base . ' $web_config_file =
RewriteRule ^index\.php$ - [L] '<?xml version="1.0" encoding="UTF-8"?>
<configuration>
# uploaded files <system.webServer>
RewriteRule ^' . ( $subdomain_install ? '' : '([_0-9a-zA-Z-]+/)?' ) . 'files/(.+) wp-includes/ms-files.php?file=$' . ( $subdomain_install ? 1 : 2 ) . ' [L]' . "\n"; <rewrite>
<rules>
if ( ! $subdomain_install ) <rule name="WordPress Rule 1" stopProcessing="true">
$htaccess_file .= "\n# add a trailing slash to /wp-admin\n" . 'RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]' . "\n"; <match url="^index\.php$" ignoreCase="false" />
<action type="None" />
$htaccess_file .= "\n" . 'RewriteCond %{REQUEST_FILENAME} -f [OR] </rule>
RewriteCond %{REQUEST_FILENAME} -d <rule name="WordPress Rule 2" stopProcessing="true">
RewriteRule ^ - [L]'; <match url="^files/(.+)" ignoreCase="false" />
<action type="Rewrite" url="wp-includes/ms-files.php?file={R:1}" appendQueryString="false" />
// @todo custom content dir. </rule>
if ( ! $subdomain_install ) <rule name="WordPress Rule 3" stopProcessing="true">
$htaccess_file .= "\n" . 'RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] <match url="^" ignoreCase="false" />
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]'; <conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
$htaccess_file .= "\nRewriteRule . index.php [L]"; <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
</conditions>
?> <action type="None" />
<li><p><?php printf( __( 'Add the following to your <code>.htaccess</code> file in <code>%s</code>, replacing other WordPress rules:' ), ABSPATH ); ?></p> </rule>
<textarea class="code" readonly="readonly" cols="100" rows="<?php echo $subdomain_install ? 11 : 16; ?>"> <rule name="WordPress Rule 4" stopProcessing="true">
<?php echo wp_htmledit_pre( $htaccess_file ); ?> <match url="." ignoreCase="false" />
</textarea></li> <action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>';
} else {
$web_config_file =
'<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<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>
</rules>
</rewrite>
</system.webServer>
</configuration>';
}
?>
<li><p><?php printf( __( 'Add the following to your <code>web.config</code> file in <code>%s</code>, replacing other WordPress rules:' ), ABSPATH ); ?></p>
<textarea class="code" readonly="readonly" cols="100" rows="20">
<?php echo wp_htmledit_pre( $web_config_file ); ?>
</textarea></li>
</ol> </ol>
<?php if ( !is_multisite() ) { ?> <?php } else {
// Construct an htaccess file.
$htaccess_file = 'RewriteEngine On
RewriteBase ' . $base . '
RewriteRule ^index\.php$ - [L]
# uploaded files
RewriteRule ^' . ( $subdomain_install ? '' : '([_0-9a-zA-Z-]+/)?' ) . 'files/(.+) wp-includes/ms-files.php?file=$' . ( $subdomain_install ? 1 : 2 ) . ' [L]' . "\n";
if ( ! $subdomain_install )
$htaccess_file .= "\n# add a trailing slash to /wp-admin\n" . 'RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]' . "\n";
$htaccess_file .= "\n" . 'RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]';
// @todo custom content dir.
if ( ! $subdomain_install )
$htaccess_file .= "\n" . 'RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]';
$htaccess_file .= "\nRewriteRule . index.php [L]";
?>
<li><p><?php printf( __( 'Add the following to your <code>.htaccess</code> file in <code>%s</code>, replacing other WordPress rules:' ), ABSPATH ); ?></p>
<textarea class="code" readonly="readonly" cols="100" rows="<?php echo $subdomain_install ? 11 : 16; ?>">
<?php echo wp_htmledit_pre( $htaccess_file ); ?>
</textarea></li>
</ol>
<?php }
if ( !is_multisite() ) { ?>
<p><?php printf( __( 'Once you complete these steps, your network is enabled and configured. You will have to log in again.') ); ?> <a href="<?php echo esc_url( site_url( 'wp-login.php' ) ); ?>"><?php _e( 'Log In' ); ?></a></p> <p><?php printf( __( 'Once you complete these steps, your network is enabled and configured. You will have to log in again.') ); ?> <a href="<?php echo esc_url( site_url( 'wp-login.php' ) ); ?>"><?php _e( 'Log In' ); ?></a></p>
<?php <?php
} }

View File

@ -1302,7 +1302,7 @@ function signup_nonce_check( $result ) {
function maybe_redirect_404() { function maybe_redirect_404() {
global $current_site; global $current_site;
if ( is_main_site() && is_404() && defined( 'NOBLOGREDIRECT' ) && ( $destination = NOBLOGREDIRECT ) ) { if ( ( !defined( 'NO404REDIRECT' ) || ! NO404REDIRECT ) && is_main_site() && is_404() && defined( 'NOBLOGREDIRECT' ) && ( $destination = NOBLOGREDIRECT ) ) {
if ( $destination == '%siteurl%' ) if ( $destination == '%siteurl%' )
$destination = network_home_url(); $destination = network_home_url();
wp_redirect( $destination ); wp_redirect( $destination );

View File

@ -1757,10 +1757,16 @@ class WP_Rewrite {
if ( ! $this->using_permalinks() ) if ( ! $this->using_permalinks() )
return ''; return '';
$rules = '';
$extra_indent = '';
if ( $add_parent_tags ) {
$rules .= "<configuration>".$end_of_line;
$rules .= $indent."<system.webServer>".$end_of_line;
$rules .= $indent.$indent."<rewrite>".$end_of_line;
$rules .= $indent.$indent.$indent."<rules>".$end_of_line;
$extra_indent = $indent.$indent.$indent.$indent;
}
if ( !is_multisite() ) { if ( !is_multisite() ) {
$rules = '';
$extra_indent = '';
if ( $add_parent_tags ) { if ( $add_parent_tags ) {
$rules .= "<configuration>".$end_of_line; $rules .= "<configuration>".$end_of_line;
$rules .= $indent."<system.webServer>".$end_of_line; $rules .= $indent."<system.webServer>".$end_of_line;
@ -1778,63 +1784,69 @@ class WP_Rewrite {
$rules .= $extra_indent.$indent."<action type=\"Rewrite\" url=\"index.php\" />".$end_of_line; $rules .= $extra_indent.$indent."<action type=\"Rewrite\" url=\"index.php\" />".$end_of_line;
$rules .= $extra_indent."</rule>"; $rules .= $extra_indent."</rule>";
if ( $add_parent_tags ) {
$rules .= $end_of_line.$indent.$indent.$indent."</rules>".$end_of_line;
$rules .= $indent.$indent."</rewrite>".$end_of_line;
$rules .= $indent."</system.webServer>".$end_of_line;
$rules .= "</configuration>";
}
} else { } else {
$siteurl = get_option( 'siteurl' ); if (is_subdomain_install()) {
$siteurl_len = strlen( $siteurl ); $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 1\" stopProcessing=\"true\">".$end_of_line;
if ( substr( WP_CONTENT_URL, 0, $siteurl_len ) == $siteurl && strlen( WP_CONTENT_URL ) > $siteurl_len ) $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^index\.php$\" ignoreCase=\"false\" />".$end_of_line;
$content_path = substr( WP_CONTENT_URL, $siteurl_len + 1 ); $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"None\" />".$end_of_line;
else $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
$content_path = 'wp-content'; $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 2\" stopProcessing=\"true\">".$end_of_line;
$rules = '<rule name="wordpress - strip index.php" stopProcessing="false"> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^files/(.+)\" ignoreCase=\"false\" />".$end_of_line;
<match url="^index.php/(.*)$" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"Rewrite\" url=\"wp-includes/ms-files.php?file={R:1}\" appendQueryString=\"false\" />".$end_of_line;
<action type="Rewrite" url="{R:1}" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
</rule> $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 3\" stopProcessing=\"true\">".$end_of_line;
<rule name="wordpress - 1" stopProcessing="true"> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^\" ignoreCase=\"false\" />".$end_of_line;
<match url="^(.*/)?files/$" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<conditions logicalGrouping=\"MatchAny\">".$end_of_line;
<action type="Rewrite" url="index.php" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent.$indent."<add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" ignoreCase=\"false\" />".$end_of_line;
</rule> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent.$indent."<add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" />".$end_of_line;
<rule name="wordpress - 2" stopProcessing="true"> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."</conditions>".$end_of_line;
<match url="^(.*/)?files/(.*)" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"None\" />".$end_of_line;
<conditions> $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
<add input="{REQUEST_URI}" negate="true" pattern=".*' . $content_path . '/plugins.*"/> $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 4\" stopProcessing=\"true\">".$end_of_line;
</conditions> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\".\" ignoreCase=\"false\" />".$end_of_line;
<action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"Rewrite\" url=\"index.php\" />".$end_of_line;
</rule> $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
<rule name="wordpress - 3" stopProcessing="true"> } else {
<match url="^(.+)$" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 1\" stopProcessing=\"true\">".$end_of_line;
<conditions> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^index\.php$\" ignoreCase=\"false\" />".$end_of_line;
<add input="{REQUEST_URI}" pattern="^.*/wp-admin$" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"None\" />".$end_of_line;
</conditions> $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
<action type="Redirect" url="{R:1}/" redirectType="Permanent" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 2\" stopProcessing=\"true\">".$end_of_line;
</rule> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^([_0-9a-zA-Z-]+/)?files/(.+)\" ignoreCase=\"false\" />".$end_of_line;
<rule name="wordpress - 4" stopProcessing="true"> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"Rewrite\" url=\"wp-includes/ms-files.php?file={R:2}\" appendQueryString=\"false\" />".$end_of_line;
<match url="."/> $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
<conditions logicalGrouping="MatchAny"> $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 3\" stopProcessing=\"true\">".$end_of_line;
<add input="{REQUEST_FILENAME}" matchType="IsFile" pattern="" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^([_0-9a-zA-Z-]+/)?wp-admin$\" ignoreCase=\"false\" />".$end_of_line;
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" pattern="" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"Redirect\" url=\"{R:1}wp-admin/\" redirectType=\"Permanent\" />".$end_of_line;
</conditions> $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
<action type="None" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 4\" stopProcessing=\"true\">".$end_of_line;
</rule> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^\" ignoreCase=\"false\" />".$end_of_line;
<rule name="wordpress - 5" stopProcessing="true"> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<conditions logicalGrouping=\"MatchAny\">".$end_of_line;
<match url="^([_0-9a-zA-Z-]+/)?(wp-.*)" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent.$indent."<add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" ignoreCase=\"false\" />".$end_of_line;
<action type="Rewrite" url="{R:2}" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent.$indent."<add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" />".$end_of_line;
</rule> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."</conditions>".$end_of_line;
<rule name="wordpress - 6" stopProcessing="true"> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"None\" />".$end_of_line;
<match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
<action type="Rewrite" url="{R:2}" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 5\" stopProcessing=\"true\">".$end_of_line;
</rule> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*)\" ignoreCase=\"false\" />".$end_of_line;
<rule name="wordpress - 7" stopProcessing="true"> $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"Rewrite\" url=\"{R:2}\" />".$end_of_line;
<match url="." /> $rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
<action type="Rewrite" url="index.php" /> $rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 6\" stopProcessing=\"true\">".$end_of_line;
</rule>'; $rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\"^([_0-9a-zA-Z-]+/)?(.*\.php)$\" ignoreCase=\"false\" />".$end_of_line;
$rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"Rewrite\" url=\"{R:2}\" />".$end_of_line;
$rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
$rules .= $extra_indent.$indent.$indent.$indent.$indent."<rule name=\"wordpress - Rule 7\" stopProcessing=\"true\">".$end_of_line;
$rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<match url=\".\" ignoreCase=\"false\" />".$end_of_line;
$rules .= $extra_indent.$indent.$indent.$indent.$indent.$indent."<action type=\"Rewrite\" url=\"index.php\" />".$end_of_line;
$rules .= $extra_indent.$indent.$indent.$indent.$indent."</rule>".$end_of_line;
}
}
if ( $add_parent_tags ) {
$rules .= $end_of_line.$indent.$indent.$indent."</rules>".$end_of_line;
$rules .= $indent.$indent."</rewrite>".$end_of_line;
$rules .= $indent."</system.webServer>".$end_of_line;
$rules .= "</configuration>";
} }
$rules = apply_filters('iis7_url_rewrite_rules', $rules); $rules = apply_filters('iis7_url_rewrite_rules', $rules);
return $rules; return $rules;