From f927494ece5a230889b9a47abab8a58c2cec0328 Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Mon, 19 Sep 2011 13:48:34 -0400
Subject: [PATCH] Added support for the "Redirect" tab to nginx.

---
 interface/web/sites/templates/web_domain_advanced.htm  |    8 --
 interface/web/sites/templates/web_aliasdomain_edit.htm |   31 ++++++++++
 server/conf/nginx_vhost.conf.master                    |   11 +++
 interface/web/sites/templates/web_subdomain_edit.htm   |   31 ++++++++++
 interface/web/sites/form/web_aliasdomain.tform.php     |    2 
 install/tpl/nginx_ispconfig.vhost.master               |    2 
 interface/web/sites/form/web_subdomain.tform.php       |    2 
 interface/web/sites/templates/web_domain_redirect.htm  |   31 ++++++++++
 server/plugins-available/nginx_plugin.inc.php          |   44 ++++++++------
 interface/web/sites/form/web_domain.tform.php          |    2 
 10 files changed, 133 insertions(+), 31 deletions(-)

diff --git a/install/tpl/nginx_ispconfig.vhost.master b/install/tpl/nginx_ispconfig.vhost.master
index ab0c6e4..19655e0 100644
--- a/install/tpl/nginx_ispconfig.vhost.master
+++ b/install/tpl/nginx_ispconfig.vhost.master
@@ -17,6 +17,7 @@
         }
 
         location ~ \.php$ {
+               try_files $uri =404;
                fastcgi_pass 127.0.0.1:{fpm_port};
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
@@ -32,6 +33,7 @@
                root /usr/share/;
                index index.php index.html index.htm;
                location ~ ^/phpmyadmin/(.+\.php)$ {
+                       try_files $uri =404;
                        root /usr/share/;
                        fastcgi_pass 127.0.0.1:{fpm_port};
                        {ssl_comment}fastcgi_param  HTTPS {fastcgi_ssl};
diff --git a/interface/web/sites/form/web_aliasdomain.tform.php b/interface/web/sites/form/web_aliasdomain.tform.php
index b44ac98..72cd2e1 100644
--- a/interface/web/sites/form/web_aliasdomain.tform.php
+++ b/interface/web/sites/form/web_aliasdomain.tform.php
@@ -106,7 +106,7 @@
 			'datatype'	=> 'VARCHAR',
 			'formtype'	=> 'SELECT',
 			'default'	=> 'y',
-			'value'		=> array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L')
+			'value'		=> array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent')
 		),
 		'redirect_path' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/sites/form/web_domain.tform.php b/interface/web/sites/form/web_domain.tform.php
index 8475b91..5adca05 100644
--- a/interface/web/sites/form/web_domain.tform.php
+++ b/interface/web/sites/form/web_domain.tform.php
@@ -231,7 +231,7 @@
 			'datatype'	=> 'VARCHAR',
 			'formtype'	=> 'SELECT',
 			'default'	=> '',
-			'value'		=> array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L')
+			'value'		=> array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent')
 		),
 		'redirect_path' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/sites/form/web_subdomain.tform.php b/interface/web/sites/form/web_subdomain.tform.php
index ffcce7a..116c5b4 100644
--- a/interface/web/sites/form/web_subdomain.tform.php
+++ b/interface/web/sites/form/web_subdomain.tform.php
@@ -106,7 +106,7 @@
 			'datatype'	=> 'VARCHAR',
 			'formtype'	=> 'SELECT',
 			'default'	=> 'y',
-			'value'		=> array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L')
+			'value'		=> array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent')
 		),
 		'redirect_path' => array (
 			'datatype'	=> 'VARCHAR',
diff --git a/interface/web/sites/templates/web_aliasdomain_edit.htm b/interface/web/sites/templates/web_aliasdomain_edit.htm
index 688ed52..3f3b38d 100644
--- a/interface/web/sites/templates/web_aliasdomain_edit.htm
+++ b/interface/web/sites/templates/web_aliasdomain_edit.htm
@@ -54,3 +54,34 @@
 	</div>
 
 </div>
+<script language="JavaScript" type="text/javascript">
+		var webId = jQuery('input[name="id"]').val();
+		var serverId;
+		getServerId(webId);
+		adjustForm(serverId);
+		
+		function getServerId(webId){
+			jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {web_id : webId, type : "getserverid"}, function(data) {
+				serverId = data.serverid;
+			});
+		}
+		
+		function adjustForm(serverId){
+			jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, type : "getservertype"}, function(data) {
+				var selected = jQuery('#redirect_type').val();
+				if(data.servertype == "nginx"){
+					jQuery('#redirect_type option[value="R"]').hide();
+					jQuery('#redirect_type option[value="L"]').hide();
+					jQuery('#redirect_type option[value="R,L"]').hide();
+					if(selected != "no" && selected != "" && selected != "last"  && selected != "break"  && selected != "redirect"  && selected != "permanent") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected');
+				} else {
+					jQuery('#redirect_type option[value="last"]').hide();
+					jQuery('#redirect_type option[value="break"]').hide();
+					jQuery('#redirect_type option[value="redirect"]').hide();
+					jQuery('#redirect_type option[value="permanent"]').hide();
+					if(selected != "no" && selected != "" && selected != "R"  && selected != "L"  && selected != "R,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected');
+				}
+			});
+		}
+			
+</script>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_domain_advanced.htm b/interface/web/sites/templates/web_domain_advanced.htm
index afc15fb..92a77c0 100644
--- a/interface/web/sites/templates/web_domain_advanced.htm
+++ b/interface/web/sites/templates/web_domain_advanced.htm
@@ -64,17 +64,9 @@
 				if(data.servertype == "nginx"){
 					jQuery('.nginx').show();
 					jQuery('.apache').hide();
-					/*
-					jQuery('#allow_override').closest('div.ctrlHolder').hide();
-					jQuery('#apache_directives').closest('div.ctrlHolder').hide();
-					*/
 				} else {
 					jQuery('.nginx').hide();
 					jQuery('.apache').show();
-					/*
-					jQuery('#allow_override').closest('div.ctrlHolder').show();
-					jQuery('#apache_directives').closest('div.ctrlHolder').show();
-					*/
 				}
 			});
 		}
diff --git a/interface/web/sites/templates/web_domain_redirect.htm b/interface/web/sites/templates/web_domain_redirect.htm
index 8f07bef..14e1827 100644
--- a/interface/web/sites/templates/web_domain_redirect.htm
+++ b/interface/web/sites/templates/web_domain_redirect.htm
@@ -26,3 +26,34 @@
   </div>
   
 </div>
+<script language="JavaScript" type="text/javascript">
+		var webId = jQuery('input[name="id"]').val();
+		var serverId;
+		getServerId(webId);
+		adjustForm(serverId);
+		
+		function getServerId(webId){
+			jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {web_id : webId, type : "getserverid"}, function(data) {
+				serverId = data.serverid;
+			});
+		}
+		
+		function adjustForm(serverId){
+			jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, type : "getservertype"}, function(data) {
+				var selected = jQuery('#redirect_type').val();
+				if(data.servertype == "nginx"){
+					jQuery('#redirect_type option[value="R"]').hide();
+					jQuery('#redirect_type option[value="L"]').hide();
+					jQuery('#redirect_type option[value="R,L"]').hide();
+					if(selected != "no" && selected != "" && selected != "last"  && selected != "break"  && selected != "redirect"  && selected != "permanent") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected');
+				} else {
+					jQuery('#redirect_type option[value="last"]').hide();
+					jQuery('#redirect_type option[value="break"]').hide();
+					jQuery('#redirect_type option[value="redirect"]').hide();
+					jQuery('#redirect_type option[value="permanent"]').hide();
+					if(selected != "no" && selected != "" && selected != "R"  && selected != "L"  && selected != "R,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected');
+				}
+			});
+		}
+			
+</script>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_subdomain_edit.htm b/interface/web/sites/templates/web_subdomain_edit.htm
index c0bc0f7..c9f6a94 100644
--- a/interface/web/sites/templates/web_subdomain_edit.htm
+++ b/interface/web/sites/templates/web_subdomain_edit.htm
@@ -40,3 +40,34 @@
   </div>
   
 </div>
+<script language="JavaScript" type="text/javascript">
+		var webId = jQuery('input[name="id"]').val();
+		var serverId;
+		getServerId(webId);
+		adjustForm(serverId);
+		
+		function getServerId(webId){
+			jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {web_id : webId, type : "getserverid"}, function(data) {
+				serverId = data.serverid;
+			});
+		}
+		
+		function adjustForm(serverId){
+			jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, type : "getservertype"}, function(data) {
+				var selected = jQuery('#redirect_type').val();
+				if(data.servertype == "nginx"){
+					jQuery('#redirect_type option[value="R"]').hide();
+					jQuery('#redirect_type option[value="L"]').hide();
+					jQuery('#redirect_type option[value="R,L"]').hide();
+					if(selected != "no" && selected != "" && selected != "last"  && selected != "break"  && selected != "redirect"  && selected != "permanent") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected');
+				} else {
+					jQuery('#redirect_type option[value="last"]').hide();
+					jQuery('#redirect_type option[value="break"]').hide();
+					jQuery('#redirect_type option[value="redirect"]').hide();
+					jQuery('#redirect_type option[value="permanent"]').hide();
+					if(selected != "no" && selected != "" && selected != "R"  && selected != "L"  && selected != "R,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected');
+				}
+			});
+		}
+			
+</script>
\ No newline at end of file
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master
index 9da8c2b..ccad2d7 100644
--- a/server/conf/nginx_vhost.conf.master
+++ b/server/conf/nginx_vhost.conf.master
@@ -10,6 +10,13 @@
         server_name <tmpl_var name='domain'> <tmpl_var name='alias'>;
 
         root   <tmpl_var name='web_document_root_www'>;
+		
+        <tmpl_loop name="redirects">
+		
+        if ($http_host ~* "<tmpl_var name='rewrite_domain'>$") {
+            rewrite ^/(.+)$ <tmpl_var name='rewrite_target'>$1 <tmpl_var name='rewrite_type'>;
+        }
+        </tmpl_loop>
 
         location / {
             index index.html index.php;
@@ -47,7 +54,7 @@
             log_not_found off;
         }
 		
-        location = /favicon.ico {
+        location /favicon.ico {
             log_not_found off;
             access_log off;
         }
@@ -67,6 +74,7 @@
         <tmpl_if name='php' op='==' value='fast-cgi'>
 		
         location ~ \.php$ {
+            try_files $uri =404;
             fastcgi_pass 127.0.0.1:<tmpl_var name='fpm_port'>;
             fastcgi_index index.php;
             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
@@ -83,6 +91,7 @@
 		<tmpl_if name='cgi' op='==' value='y'>
 		
         location /cgi-bin/ {
+            try_files $uri =404;
             root <tmpl_var name='document_root'>;
             gzip off;
             fastcgi_pass  unix:/var/run/fcgiwrap.socket;
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index 4d8ac0a..cd154f3 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -675,22 +675,24 @@
 			}
 			*/
 
-			$rewrite_rules[] = array(	'rewrite_domain' 	=> $data['new']['domain'],
-					'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
-					'rewrite_target' 	=> $data['new']['redirect_path']);
-
 			switch($data['new']['subdomain']) {
 				case 'www':
-					$rewrite_rules[] = array(	'rewrite_domain' 	=> 'www.'.$data['new']['domain'],
-							'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
+					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$data['new']['domain'],
+					'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'],
+					'rewrite_target' 	=> $data['new']['redirect_path']);
+					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^www.'.$data['new']['domain'],
+							'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'],
 							'rewrite_target' 	=> $data['new']['redirect_path']);
 					break;
 				case '*':
-				// TODO
-				//$rewrite_rules[] = array(	'rewrite_domain' 	=> '*'.$alias['domain'],
-				//							'rewrite_type' 		=> $alias['redirect_type'],
-				//							'rewrite_target' 	=> $alias['redirect_path']);
+					$rewrite_rules[] = array(	'rewrite_domain' 	=> $data['new']['domain'],
+						'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'],
+						'rewrite_target' 	=> $data['new']['redirect_path']);
 					break;
+				default:
+					$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$data['new']['domain'],
+					'rewrite_type' 		=> ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'],
+					'rewrite_target' 	=> $data['new']['redirect_path']);
 			}
 		}
 
@@ -727,21 +729,25 @@
 						$data['new']['redirect_path'] = $data['new']['document_root'].'/web'.realpath($data['new']['redirect_path']).'/';
 					}
 					*/
-					$rewrite_rules[] = array(	'rewrite_domain' 	=> $alias['domain'],
-							'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
-							'rewrite_target' 	=> $alias['redirect_path']);
+					
 					switch($alias['subdomain']) {
 						case 'www':
-							$rewrite_rules[] = array(	'rewrite_domain' 	=> 'www.'.$alias['domain'],
-									'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
+							$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$alias['domain'],
+								'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'],
+								'rewrite_target' 	=> $alias['redirect_path']);
+							$rewrite_rules[] = array(	'rewrite_domain' 	=> '^www.'.$alias['domain'],
+									'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'],
 									'rewrite_target' 	=> $alias['redirect_path']);
 							break;
 						case '*':
-						// TODO
-						//$rewrite_rules[] = array(	'rewrite_domain' 	=> '*'.$alias['domain'],
-						//							'rewrite_type' 		=> $alias['redirect_type'],
-						//							'rewrite_target' 	=> $alias['redirect_path']);
+							$rewrite_rules[] = array(	'rewrite_domain' 	=> $alias['domain'],
+								'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'],
+								'rewrite_target' 	=> $alias['redirect_path']);
 							break;
+						default:
+							$rewrite_rules[] = array(	'rewrite_domain' 	=> '^'.$alias['domain'],
+							'rewrite_type' 		=> ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'],
+							'rewrite_target' 	=> $alias['redirect_path']);
 					}
 				}
 			}

--
Gitblit v1.9.1