Advertisements

iis7_add_rewrite_rule

Definition:
function iis7_add_rewrite_rule($filename, $rewrite_rule) {}

Add WordPress rewrite rule to the IIS 7 configuration file.

Parameters

  • string $filename: The file path to the configuration file
  • string $rewrite_rule: The XML fragment with URL Rewrite rule

Source code

function iis7_add_rewrite_rule($filename, $rewrite_rule) {

	if ( ! class_exists('DOMDocument') )

		return false;



	// If configuration file does not exist then we create one.

	if ( ! file_exists($filename) ) {

		$fp = fopen( $filename, 'w');

		fwrite($fp, '<configuration/>');

		fclose($fp);

	}



	$doc = new DOMDocument();

	$doc->preserveWhiteSpace = false;



	if ( $doc->load($filename) === false )

		return false;



	$xpath = new DOMXPath($doc);



	// First check if the rule already exists as in that case there is no need to re-add it

	$wordpress_rules = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')]');

	if ( $wordpress_rules->length > 0 )

		return true;



	// Check the XPath to the rewrite rule and create XML nodes if they do not exist

	$xmlnodes = $xpath->query('/configuration/system.webServer/rewrite/rules');

	if ( $xmlnodes->length > 0 ) {

		$rules_node = $xmlnodes->item(0);

	} else {

		$rules_node = $doc->createElement('rules');



		$xmlnodes = $xpath->query('/configuration/system.webServer/rewrite');

		if ( $xmlnodes->length > 0 ) {

			$rewrite_node = $xmlnodes->item(0);

			$rewrite_node->appendChild($rules_node);

		} else {

			$rewrite_node = $doc->createElement('rewrite');

			$rewrite_node->appendChild($rules_node);



			$xmlnodes = $xpath->query('/configuration/system.webServer');

			if ( $xmlnodes->length > 0 ) {

				$system_webServer_node = $xmlnodes->item(0);

				$system_webServer_node->appendChild($rewrite_node);

			} else {

				$system_webServer_node = $doc->createElement('system.webServer');

				$system_webServer_node->appendChild($rewrite_node);



				$xmlnodes = $xpath->query('/configuration');

				if ( $xmlnodes->length > 0 ) {

					$config_node = $xmlnodes->item(0);

					$config_node->appendChild($system_webServer_node);

				} else {

					$config_node = $doc->createElement('configuration');

					$doc->appendChild($config_node);

					$config_node->appendChild($system_webServer_node);

				}

			}

		}

	}



	$rule_fragment = $doc->createDocumentFragment();

	$rule_fragment->appendXML($rewrite_rule);

	$rules_node->appendChild($rule_fragment);



	$doc->encoding = "UTF-8";

	$doc->formatOutput = true;

	saveDomDocument($doc, $filename);



	return true;

}

1965

Advertisements

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: