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/plugins-available/apache2_plugin.inc.php |   28 ++++++++++++++++++++--------
 1 files changed, 20 insertions(+), 8 deletions(-)

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