From 046d621d739beb7b24473f7ef6ab2483771fe8fe Mon Sep 17 00:00:00 2001 From: mcramer <m.cramer@pixcept.de> Date: Thu, 27 Sep 2012 07:06:28 -0400 Subject: [PATCH] Fixed: redirect loop on redirect path --- server/conf/vhost.conf.master | 5 ++++- server/plugins-available/apache2_plugin.inc.php | 28 ++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index 7e9df0e..a5aac0e 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -257,7 +257,10 @@ </tmpl_if> <tmpl_loop name="redirects"> RewriteCond %{HTTP_HOST} <tmpl_var name='rewrite_domain'>$ [NC] - RewriteCond %{REQUEST_URI} !^/webdav/ +<tmpl_if name="rewrite_is_url" op="==" value="n"> + RewriteCond %{REQUEST_URI} !^/webdav/ + RewriteCond %{REQUEST_URI} !^<tmpl_var name='rewrite_target'> +</tmpl_if> RewriteRule ^/(.*)$ <tmpl_var name='rewrite_target'>$1 <tmpl_var name='rewrite_type'> </tmpl_loop> </tmpl_if> diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index c8f78f4..45134fe 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -887,23 +887,27 @@ $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_target_ssl' => $rewrite_target_ssl, + 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n')); $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); + 'rewrite_target_ssl' => $rewrite_target_ssl, + 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n')); break; case '*': $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_target_ssl' => $rewrite_target_ssl, + 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n')); break; default: $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_target_ssl' => $rewrite_target_ssl, + 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n')); } } @@ -968,17 +972,20 @@ $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_target_ssl' => $rewrite_target_ssl, + 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n')); $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); + 'rewrite_target_ssl' => $rewrite_target_ssl, + 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n')); break; case '*': $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_target_ssl' => $rewrite_target_ssl, + 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n')); break; default: if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote(substr($alias['domain'], 2)); @@ -986,7 +993,8 @@ $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); + 'rewrite_target_ssl' => $rewrite_target_ssl, + 'rewrite_is_url' => ($this->_is_url($rewrite_target) ? 'y' : 'n')); } } } @@ -2567,6 +2575,10 @@ return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string); } + private function _is_url($string) { + return preg_match('/^(f|ht)tp(s)?:\/\//i', $string); + } + } // end class ?> -- Gitblit v1.9.1