From e34fec13567f76f1a052362c071bd7e1a85dd7cf Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Thu, 08 Nov 2012 08:52:13 -0500
Subject: [PATCH] - Added more options to the SEO Redirect field.

---
 server/conf/vhost.conf.master                         |    2 
 server/conf/nginx_vhost.conf.master                   |    2 
 server/plugins-available/apache2_plugin.inc.php       |   37 ++++++++++++++++--
 interface/web/sites/templates/web_domain_redirect.htm |    2 
 server/plugins-available/nginx_plugin.inc.php         |   35 +++++++++++++++--
 interface/web/sites/form/web_domain.tform.php         |    2 
 6 files changed, 67 insertions(+), 13 deletions(-)

diff --git a/interface/web/sites/form/web_domain.tform.php b/interface/web/sites/form/web_domain.tform.php
index 45cf87e..86bc116 100644
--- a/interface/web/sites/form/web_domain.tform.php
+++ b/interface/web/sites/form/web_domain.tform.php
@@ -310,7 +310,7 @@
 			'datatype'	=> 'VARCHAR',
 			'formtype'	=> 'SELECT',
 			'default'	=> '',
-			'value'		=> array('' => 'no_redirect_txt', 'non_www_to_www' => 'non_www_to_www_txt', 'www_to_non_www' => 'www_to_non_www_txt')
+			'value'		=> array('' => 'no_redirect_txt', 'non_www_to_www' => 'domain.tld => www.domain.tld', 'www_to_non_www' => 'www.domain.tld => domain.tld', '*_domain_tld_to_domain_tld' => '*.doman.tld => domain.tld', '*_domain_tld_to_www_domain_tld' => '*.domain.tld => www.domain.tld', '*_to_domain_tld' => '* => domain.tld', '*_to_www_domain_tld' => '* => www.domain.tld')
 		),
 	##################################
 	# ENDE Datatable fields
diff --git a/interface/web/sites/templates/web_domain_redirect.htm b/interface/web/sites/templates/web_domain_redirect.htm
index dfb5b05..0f69395 100644
--- a/interface/web/sites/templates/web_domain_redirect.htm
+++ b/interface/web/sites/templates/web_domain_redirect.htm
@@ -17,7 +17,7 @@
             </div>
             <div class="ctrlHolder">
                 <label for="seo_redirect">{tmpl_var name='seo_redirect_txt'}</label>
-                <select name="seo_redirect" id="seo_redirect" class="selectInput formLengthHalf">
+                <select name="seo_redirect" id="seo_redirect" class="selectInput">
                     {tmpl_var name='seo_redirect'}
                 </select>
             </div>
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index ab15542..7331a13 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -18,7 +18,7 @@
         root   <tmpl_var name='web_document_root_www'>;
 		
 <tmpl_if name='seo_redirect_enabled'>
-        if ($http_host != "<tmpl_var name='seo_redirect_target_domain'>") {
+        if ($http_host <tmpl_var name='seo_redirect_operator'> "<tmpl_var name='seo_redirect_origin_domain'>") {
             rewrite ^ $scheme://<tmpl_var name='seo_redirect_target_domain'>$request_uri? permanent;
         }
 </tmpl_if>
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index f2fbf7c..4235596 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -253,7 +253,7 @@
 <tmpl_if name="rewrite_enabled">
 		RewriteEngine on
 <tmpl_if name='seo_redirect_enabled'>
-		RewriteCond %{HTTP_HOST} ^<tmpl_var name='seo_redirect_origin_domain'>$ [NC]
+		RewriteCond %{HTTP_HOST} <tmpl_var name='seo_redirect_operator'>^<tmpl_var name='seo_redirect_origin_domain'>$ [NC]
 		RewriteRule ^(.*)$ http://<tmpl_var name='seo_redirect_target_domain'>$1 [R=301,L]
 </tmpl_if>
 <tmpl_loop name="redirects">
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index 542d62a..29b0483 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -849,15 +849,42 @@
 		//$vhost_data['document_root'] = $data['new']['document_root'].'/' . $web_folder;
 		
 		// Set SEO Redirect
-		if($data['new']['seo_redirect'] != '' && ($data['new']['subdomain'] == 'www' || $data['new']['subdomain'] == '*')){
+		if($data['new']['seo_redirect'] != ''){
 			$vhost_data['seo_redirect_enabled'] = 1;
-			if($data['new']['seo_redirect'] == 'non_www_to_www'){
-				$vhost_data['seo_redirect_origin_domain'] = $data['new']['domain'];
-				$vhost_data['seo_redirect_target_domain'] = 'www.'.$data['new']['domain'];
+			if($data['new']['subdomain'] == 'www' || $data['new']['subdomain'] == '*'){
+				if($data['new']['seo_redirect'] == 'non_www_to_www'){
+					$vhost_data['seo_redirect_origin_domain'] = str_replace('.', '\.', $data['new']['domain']);
+					$vhost_data['seo_redirect_target_domain'] = 'www.'.$data['new']['domain'];
+					$vhost_data['seo_redirect_operator'] = '';
+				}
+				if($data['new']['seo_redirect'] == '*_domain_tld_to_www_domain_tld'){
+					// ^(example\.com|(?!\bwww\b)\.example\.com)$
+					// ^(example\.com|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.example\.com))$
+					$vhost_data['seo_redirect_origin_domain'] = '('.str_replace('.', '\.', $data['new']['domain']).'|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.'.str_replace('.', '\.', $data['new']['domain']).'))';
+					$vhost_data['seo_redirect_target_domain'] = 'www.'.$data['new']['domain'];
+					$vhost_data['seo_redirect_operator'] = '';
+				}
+				if($data['new']['seo_redirect'] == '*_to_www_domain_tld'){
+					$vhost_data['seo_redirect_origin_domain'] = 'www\.'.str_replace('.', '\.', $data['new']['domain']);
+					$vhost_data['seo_redirect_target_domain'] = 'www.'.$data['new']['domain'];
+					$vhost_data['seo_redirect_operator'] = '!';
+				}
 			}
 			if($data['new']['seo_redirect'] == 'www_to_non_www'){
-				$vhost_data['seo_redirect_origin_domain'] = 'www.'.$data['new']['domain'];
+				$vhost_data['seo_redirect_origin_domain'] = 'www\.'.str_replace('.', '\.', $data['new']['domain']);
 				$vhost_data['seo_redirect_target_domain'] = $data['new']['domain'];
+				$vhost_data['seo_redirect_operator'] = '';
+			}
+			if($data['new']['seo_redirect'] == '*_domain_tld_to_domain_tld'){
+				// ^(.+)\.example\.com$
+				$vhost_data['seo_redirect_origin_domain'] = '(.+)\.'.str_replace('.', '\.', $data['new']['domain']);
+				$vhost_data['seo_redirect_target_domain'] = $data['new']['domain'];
+				$vhost_data['seo_redirect_operator'] = '';
+			}
+			if($data['new']['seo_redirect'] == '*_to_domain_tld'){
+				$vhost_data['seo_redirect_origin_domain'] = str_replace('.', '\.', $data['new']['domain']);
+				$vhost_data['seo_redirect_target_domain'] = $data['new']['domain'];
+				$vhost_data['seo_redirect_operator'] = '!';
 			}
 		} else {
 			$vhost_data['seo_redirect_enabled'] = 0;
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 7f88410..68e8c6e 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -920,15 +920,42 @@
 		}
 
 		// Set SEO Redirect
-		if($data['new']['seo_redirect'] != '' && ($data['new']['subdomain'] == 'www' || $data['new']['subdomain'] == '*')){
+		if($data['new']['seo_redirect'] != ''){
 			$vhost_data['seo_redirect_enabled'] = 1;
-			if($data['new']['seo_redirect'] == 'non_www_to_www'){
-				$vhost_data['seo_redirect_origin_domain'] = $data['new']['domain'];
-				$vhost_data['seo_redirect_target_domain'] = 'www.'.$data['new']['domain'];
+			if($data['new']['subdomain'] == 'www' || $data['new']['subdomain'] == '*'){
+				if($data['new']['seo_redirect'] == 'non_www_to_www'){
+					$vhost_data['seo_redirect_origin_domain'] = $data['new']['domain'];
+					$vhost_data['seo_redirect_target_domain'] = 'www.'.$data['new']['domain'];
+					$vhost_data['seo_redirect_operator'] = '=';
+				}
+				if($data['new']['seo_redirect'] == '*_domain_tld_to_www_domain_tld'){
+					// ^(example\.com|(?!\bwww\b)\.example\.com)$
+					// ^(example\.com|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.example\.com))$
+					$vhost_data['seo_redirect_origin_domain'] = '^('.str_replace('.', '\.', $data['new']['domain']).'|((?:\w+(?:-\w+)*\.)*)((?!www\.)\w+(?:-\w+)*)(\.'.str_replace('.', '\.', $data['new']['domain']).'))$';
+					$vhost_data['seo_redirect_target_domain'] = 'www.'.$data['new']['domain'];
+					$vhost_data['seo_redirect_operator'] = '~*';
+				}
+				if($data['new']['seo_redirect'] == '*_to_www_domain_tld'){
+					$vhost_data['seo_redirect_origin_domain'] = 'www.'.$data['new']['domain'];
+					$vhost_data['seo_redirect_target_domain'] = $vhost_data['seo_redirect_origin_domain'];
+					$vhost_data['seo_redirect_operator'] = '!=';
+				}
 			}
 			if($data['new']['seo_redirect'] == 'www_to_non_www'){
 				$vhost_data['seo_redirect_origin_domain'] = 'www.'.$data['new']['domain'];
 				$vhost_data['seo_redirect_target_domain'] = $data['new']['domain'];
+				$vhost_data['seo_redirect_operator'] = '=';
+			}
+			if($data['new']['seo_redirect'] == '*_domain_tld_to_domain_tld'){
+				// ^(.+)\.example\.com$
+				$vhost_data['seo_redirect_origin_domain'] = '^(.+)\.'.str_replace('.', '\.', $data['new']['domain']).'$';
+				$vhost_data['seo_redirect_target_domain'] = $data['new']['domain'];
+				$vhost_data['seo_redirect_operator'] = '~*';
+			}
+			if($data['new']['seo_redirect'] == '*_to_domain_tld'){
+				$vhost_data['seo_redirect_origin_domain'] = $data['new']['domain'];
+				$vhost_data['seo_redirect_target_domain'] = $vhost_data['seo_redirect_origin_domain'];
+				$vhost_data['seo_redirect_operator'] = '!=';
 			}
 		} else {
 			$vhost_data['seo_redirect_enabled'] = 0;

--
Gitblit v1.9.1