From 95e8cecde56b679950d41444e8638b1acdb90a0c Mon Sep 17 00:00:00 2001 From: mcramer <m.cramer@pixcept.de> Date: Thu, 13 Sep 2012 09:31:56 -0400 Subject: [PATCH] Fixed: Domain names in rewrite rules need the . and special chars to be escaped --- server/plugins-available/apache2_plugin.inc.php | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 7d3a2e6..398b4ae 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -884,23 +884,23 @@ switch($data['new']['subdomain']) { case 'www': - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); - $rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$data['new']['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); break; case '*': - $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$data['new']['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); break; default: - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); @@ -965,23 +965,25 @@ switch($alias['subdomain']) { case 'www': - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($alias['domain']), 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); - $rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$alias['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$alias['domain']), 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); break; case '*': - $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$alias['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($alias['domain']), 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); break; default: - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'], + if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote($alias['domain']); + else $domain_rule = '^'.$this->_rewrite_quote($alias['domain']); + $rewrite_rules[] = array( 'rewrite_domain' => $domain_rule, 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); @@ -2561,6 +2563,10 @@ return symlink($cfrom, $to); } + private function _rewrite_quote($string) { + return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string); + } + } // end class ?> -- Gitblit v1.9.1