The iis7_url_rewrite_rules WordPress PHP Filter allows you to modify the list of rewrite rules formatted for output to a web.config file in an IIS environment.
Usage
add_filter('iis7_url_rewrite_rules', 'my_custom_rewrite_rules');
function my_custom_rewrite_rules($rules) {
    // your custom code here
    return $rules;
}
Parameters
- $rules(string) – The rewrite rules formatted for IIS web.config.
More information
See WordPress Developer Resources: iis7_url_rewrite_rules
Examples
Add a custom rewrite rule
Add a custom rewrite rule to the IIS web.config.
add_filter('iis7_url_rewrite_rules', 'add_my_custom_rewrite_rule');
function add_my_custom_rewrite_rule($rules) {
    $custom_rule = "\n<rule name=\"CustomRule\" stopProcessing=\"true\">\n";
    $custom_rule .= "  <match url=\"^custom-path/([0-9]+)/?$\" ignoreCase=\"false\" />\n";
    $custom_rule .= "  <action type=\"Rewrite\" url=\"index.php?pagename=custom-page&custom_id={R:1}\" />\n";
    $custom_rule .= "</rule>";
    $rules .= $custom_rule;
    return $rules;
}
Remove a specific rule
Remove a specific rule from the IIS web.config by searching for the rule name.
add_filter('iis7_url_rewrite_rules', 'remove_specific_rule');
function remove_specific_rule($rules) {
    $rule_name = "RuleToRemove";
    $rule_start = strpos($rules, "<rule name=\"$rule_name\"");
    $rule_end = strpos($rules, "</rule>", $rule_start) + 7;
    if ($rule_start !== false && $rule_end !== false) {
        $rules = substr_replace($rules, '', $rule_start, $rule_end - $rule_start);
    }
    return $rules;
}
Replace a rule with a custom rule
Replace an existing rule in the IIS web.config with a custom rule.
add_filter('iis7_url_rewrite_rules', 'replace_existing_rule');
function replace_existing_rule($rules) {
    $old_rule_name = "OldRule";
    $new_rule = "<rule name=\"NewRule\" stopProcessing=\"true\">\n";
    $new_rule .= "  <match url=\"^new-path/([0-9]+)/?$\" ignoreCase=\"false\" />\n";
    $new_rule .= "  <action type=\"Rewrite\" url=\"index.php?pagename=new-page&new_id={R:1}\" />\n";
    $new_rule .= "</rule>";
    $rule_start = strpos($rules, "<rule name=\"$old_rule_name\"");
    $rule_end = strpos($rules, "</rule>", $rule_start) + 7;
    if ($rule_start !== false && $rule_end !== false) {
        $rules = substr_replace($rules, $new_rule, $rule_start, $rule_end - $rule_start);
    }
    return $rules;
}
Disable all rewrite rules
Disable all rewrite rules in the IIS web.config.
add_filter('iis7_url_rewrite_rules', 'disable_all_rewrite_rules');
function disable_all_rewrite_rules($rules) {
    return '';
}
Add a custom condition to an existing rule
Add a custom condition to an existing rule in the IIS web.config.
add_filter('iis7_url_rewrite_rules', 'add_custom_condition_to_existing_rule');
function add_custom_condition_to_existing_rule($rules) {
    $rule_name = "ExistingRule";
    $custom_condition = "  <conditions>\n    <add input=\"{REQUEST_URI}\" pattern=\"^/exclude-path/\" negate=\"true\" />\n  </conditions>\n";
    $rule_start = strpos($rules, "<rule name=\"$rule_name\"");
    $action_start = strpos($rules, "<action", $rule_start);
    if ($rule_start !== false && $action_start !== false) {
        $rules = substr_replace($rules, $custom_condition, $action_start, 0);
    }
    return $rules;
}
This example adds a custom condition to the rule with the name “ExistingRule” that will exclude the rewrite rule from being applied if the request URI starts with /exclude-path/.