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