Improve IIS rewrite support. Props ruslany, peaceablewhale. fixes #10386

git-svn-id: https://develop.svn.wordpress.org/trunk@12264 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Ryan Boren 2009-11-23 18:17:46 +00:00
parent 98be65649d
commit bef6051a09
3 changed files with 40 additions and 12 deletions

View File

@ -154,7 +154,7 @@ function iis7_save_url_rewrite_rules(){
// Using win_is_writable() instead of is_writable() because of a bug in Windows PHP
if ( ( ! file_exists($web_config_file) && win_is_writable($home_path) && $wp_rewrite->using_mod_rewrite_permalinks() ) || win_is_writable($web_config_file) ) {
if ( iis7_supports_permalinks() ) {
$rule = $wp_rewrite->iis7_url_rewrite_rules();
$rule = $wp_rewrite->iis7_url_rewrite_rules(false, '', '');
if ( ! empty($rule) ) {
return iis7_add_rewrite_rule($web_config_file, $rule);
} else {
@ -587,6 +587,7 @@ function iis7_add_rewrite_rule($filename, $rewrite_rule) {
$rule_fragment->appendXML($rewrite_rule);
$rules_node->appendChild($rule_fragment);
$doc->encoding = "UTF-8";
$doc->formatOutput = true;
saveDomDocument($doc, $filename);

View File

@ -225,13 +225,22 @@ $structures = array(
</p>
</form>
<?php if ($iis7_permalinks) :
if ( isset($_POST['submit']) && $permalink_structure && ! $usingpi && ! $writable ) : ?>
if ( isset($_POST['submit']) && $permalink_structure && ! $usingpi && ! $writable ) :
if ( file_exists($home_path . 'web.config') ) : ?>
<p><?php _e('If your <code>web.config</code> file were <a href="http://codex.wordpress.org/Changing_File_Permissions">writable</a>, we could do this automatically, but it isn&#8217;t so this is the url rewrite rule you should have in your <code>web.config</code> file. Click in the field and press <kbd>CTRL + a</kbd> to select all. Then insert this rule inside of the <code>/&lt;configuration&gt;/&lt;system.webServer&gt;/&lt;rewrite&gt;/&lt;rules&gt;</code> element in <code>web.config</code> file.') ?></p>
<form action="options-permalink.php" method="post">
<?php wp_nonce_field('update-permalink') ?>
<p><textarea rows="10" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_html($wp_rewrite->iis7_url_rewrite_rules()); ?></textarea></p>
<p><textarea rows="9" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_html($wp_rewrite->iis7_url_rewrite_rules()); ?></textarea></p>
</form>
<p><?php _e('If you temporarily make your <code>web.config</code> file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved.') ?></p>
<?php else : ?>
<p><?php _e('If the root directory of your site were <a href="http://codex.wordpress.org/Changing_File_Permissions">writable</a>, we could do this automatically, but it isn&#8217;t so this is the url rewrite rule you should have in your <code>web.config</code> file. Create a new file, called <code>web.config</code> in the root directory of your site. Click in the field and press <kbd>CTRL + a</kbd> to select all. Then insert this code into the <code>web.config</code> file.') ?></p>
<form action="options-permalink.php" method="post">
<?php wp_nonce_field('update-permalink') ?>
<p><textarea rows="18" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_html($wp_rewrite->iis7_url_rewrite_rules(true)); ?></textarea></p>
</form>
<p><?php _e('If you temporarily make your site&#8217;s root directory writable for us to generate the <code>web.config</code> file automatically, do not forget to revert the permissions after the file has been created.') ?></p>
<?php endif; ?>
<?php endif; ?>
<?php else :
if ( $permalink_structure && ! $usingpi && ! $writable ) : ?>

View File

@ -1717,19 +1717,37 @@ class WP_Rewrite {
*
* @return string
*/
function iis7_url_rewrite_rules(){
function iis7_url_rewrite_rules($add_parent_tags = false, $indent = " ", $end_of_line = "\n") {
if ( ! $this->using_permalinks()) {
return '';
}
$rules = "<rule name=\"wordpress\" patternSyntax=\"Wildcard\">\n";
$rules .= " <match url=\"*\" />\n";
$rules .= " <conditions>\n";
$rules .= " <add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" negate=\"true\" />\n";
$rules .= " <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" negate=\"true\" />\n";
$rules .= " </conditions>\n";
$rules .= " <action type=\"Rewrite\" url=\"index.php\" />\n";
$rules .= "</rule>";
$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;
}
$rules .= $extra_indent."<rule name=\"wordpress\" patternSyntax=\"Wildcard\">".$end_of_line;
$rules .= $extra_indent.$indent."<match url=\"*\" />".$end_of_line;
$rules .= $extra_indent.$indent.$indent."<conditions>".$end_of_line;
$rules .= $extra_indent.$indent.$indent.$indent."<add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" negate=\"true\" />".$end_of_line;
$rules .= $extra_indent.$indent.$indent.$indent."<add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" negate=\"true\" />".$end_of_line;
$rules .= $extra_indent.$indent.$indent."</conditions>".$end_of_line;
$rules .= $extra_indent.$indent."<action type=\"Rewrite\" url=\"index.php\" />".$end_of_line;
$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>";
}
$rules = apply_filters('iis7_url_rewrite_rules', $rules);