From 49229af7ce00b59bd41081418c9c06f34ab6d7b8 Mon Sep 17 00:00:00 2001 From: ftimme <ft@falkotimme.com> Date: Fri, 02 Nov 2012 16:52:03 -0400 Subject: [PATCH] - I'm rewriting the way nginx handles rewrites/redirects. WORK IN PROGRESS! --- interface/web/sites/templates/web_aliasdomain_edit.htm | 8 + server/conf/nginx_vhost.conf.master | 48 ++++++++- interface/web/sites/templates/web_subdomain_edit.htm | 8 + interface/web/sites/form/web_aliasdomain.tform.php | 2 interface/web/sites/form/web_subdomain.tform.php | 2 interface/web/sites/templates/web_domain_redirect.htm | 6 server/plugins-available/nginx_plugin.inc.php | 196 ++++++++++++++++++++++++++++---------- interface/web/sites/form/web_domain.tform.php | 2 8 files changed, 205 insertions(+), 67 deletions(-) diff --git a/interface/web/sites/form/web_aliasdomain.tform.php b/interface/web/sites/form/web_aliasdomain.tform.php index 71365a1..bb95af6 100644 --- a/interface/web/sites/form/web_aliasdomain.tform.php +++ b/interface/web/sites/form/web_aliasdomain.tform.php @@ -116,7 +116,7 @@ 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => 'y', - 'value' => array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'R=301,L' => 'R=301,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent') + 'value' => array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'R=301,L' => 'R=301,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent', 'internal' => 'internal') ), '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 ca9b852..a26d008 100644 --- a/interface/web/sites/form/web_domain.tform.php +++ b/interface/web/sites/form/web_domain.tform.php @@ -292,7 +292,7 @@ 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => '', - 'value' => array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'R=301,L' => 'R=301,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent') + 'value' => array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'R=301,L' => 'R=301,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent', 'internal' => 'internal') ), '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 970c12b..c9d981e 100644 --- a/interface/web/sites/form/web_subdomain.tform.php +++ b/interface/web/sites/form/web_subdomain.tform.php @@ -117,7 +117,7 @@ 'datatype' => 'VARCHAR', 'formtype' => 'SELECT', 'default' => 'y', - 'value' => array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'R=301,L' => 'R=301,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent') + 'value' => array('' => 'no_redirect_txt', 'no' => 'no_flag_txt', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'R=301,L' => 'R=301,L', 'last' => 'last', 'break' => 'break', 'redirect' => 'redirect', 'permanent' => 'permanent', 'internal' => 'internal') ), '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 3f80059..dc3670e 100644 --- a/interface/web/sites/templates/web_aliasdomain_edit.htm +++ b/interface/web/sites/templates/web_aliasdomain_edit.htm @@ -89,23 +89,27 @@ jQuery('#redirect_type option[value="break"]').show(); jQuery('#redirect_type option[value="redirect"]').show(); jQuery('#redirect_type option[value="permanent"]').show(); + jQuery('#redirect_type option[value="internal"]').show(); jQuery('#redirect_type option[value="last"]').attr('disabled',false); jQuery('#redirect_type option[value="break"]').attr('disabled',false); jQuery('#redirect_type option[value="redirect"]').attr('disabled',false); jQuery('#redirect_type option[value="permanent"]').attr('disabled',false); + jQuery('#redirect_type option[value="internal"]').attr('disabled',false); - if(selected != "no" && selected != "" && selected != "last" && selected != "break" && selected != "redirect" && selected != "permanent") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "last" && selected != "break" && selected != "redirect" && selected != "permanent" && selected != "internal") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } else { jQuery('#redirect_type option[value="last"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="break"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="redirect"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="permanent"]').attr('disabled','disabled'); + jQuery('#redirect_type option[value="internal"]').attr('disabled','disabled'); 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(); + jQuery('#redirect_type option[value="internal"]').hide(); jQuery('#redirect_type option[value="R"]').show(); jQuery('#redirect_type option[value="L"]').show(); @@ -117,7 +121,7 @@ jQuery('#redirect_type option[value="R,L"]').attr('disabled',false); jQuery('#redirect_type option[value="R=301,L"]').attr('disabled',false); - if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } }); } diff --git a/interface/web/sites/templates/web_domain_redirect.htm b/interface/web/sites/templates/web_domain_redirect.htm index ddbdc04..5478d97 100644 --- a/interface/web/sites/templates/web_domain_redirect.htm +++ b/interface/web/sites/templates/web_domain_redirect.htm @@ -57,18 +57,20 @@ jQuery('#redirect_type option[value="L"]').hide(); jQuery('#redirect_type option[value="R,L"]').hide(); jQuery('#redirect_type option[value="R=301,L"]').hide(); - if(selected != "no" && selected != "" && selected != "last" && selected != "break" && selected != "redirect" && selected != "permanent") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "last" && selected != "break" && selected != "redirect" && selected != "permanent" && selected != "internal") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } else { jQuery('#redirect_type option[value="last"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="break"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="redirect"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="permanent"]').attr('disabled','disabled'); + jQuery('#redirect_type option[value="internal"]').attr('disabled','disabled'); 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" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + jQuery('#redirect_type option[value="internal"]').hide(); + if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } }); } diff --git a/interface/web/sites/templates/web_subdomain_edit.htm b/interface/web/sites/templates/web_subdomain_edit.htm index d0ab564..4b068c6 100644 --- a/interface/web/sites/templates/web_subdomain_edit.htm +++ b/interface/web/sites/templates/web_subdomain_edit.htm @@ -91,23 +91,27 @@ jQuery('#redirect_type option[value="break"]').show(); jQuery('#redirect_type option[value="redirect"]').show(); jQuery('#redirect_type option[value="permanent"]').show(); + jQuery('#redirect_type option[value="internal"]').show(); jQuery('#redirect_type option[value="last"]').attr('disabled',false); jQuery('#redirect_type option[value="break"]').attr('disabled',false); jQuery('#redirect_type option[value="redirect"]').attr('disabled',false); jQuery('#redirect_type option[value="permanent"]').attr('disabled',false); + jQuery('#redirect_type option[value="internal"]').attr('disabled',false); - if(selected != "no" && selected != "" && selected != "last" && selected != "break" && selected != "redirect" && selected != "permanent") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "last" && selected != "break" && selected != "redirect" && selected != "permanent" && selected != "internal") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } else { jQuery('#redirect_type option[value="last"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="break"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="redirect"]').attr('disabled','disabled'); jQuery('#redirect_type option[value="permanent"]').attr('disabled','disabled'); + jQuery('#redirect_type option[value="internal"]').attr('disabled','disabled'); 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(); + jQuery('#redirect_type option[value="internal"]').hide(); jQuery('#redirect_type option[value="R"]').show(); jQuery('#redirect_type option[value="L"]').show(); @@ -119,7 +123,7 @@ jQuery('#redirect_type option[value="R,L"]').attr('disabled',false); jQuery('#redirect_type option[value="R=301,L"]').attr('disabled',false); - if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); + if(selected != "no" && selected != "" && selected != "R" && selected != "L" && selected != "R,L" && selected != "R=301,L") jQuery('#redirect_type option[value="no"]').attr('selected', 'selected'); } }); } diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index 86f3cdb..254c9f8 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -22,14 +22,22 @@ rewrite ^ $scheme://<tmpl_var name='seo_redirect_target_domain'>$request_uri? permanent; } </tmpl_if> - -<tmpl_loop name="redirects"> - if ($http_host ~* "<tmpl_var name='rewrite_domain'>$") { + +<tmpl_loop name="own_redirects"> +<tmpl_if name='use_rewrite'> + #if ($http_host ~* "<tmpl_var name='rewrite_domain'>$") { #rewrite ^/(.+)$ <tmpl_var name='rewrite_target'>$1 <tmpl_var name='rewrite_type'>; rewrite ^<tmpl_var name='rewrite_exclude'>/(.+)$ <tmpl_var name='rewrite_target'>$2 <tmpl_var name='rewrite_type'>; + #rewrite ^ <tmpl_var name='rewrite_target'>$request_uri? <tmpl_var name='rewrite_type'>; + #} +</tmpl_if> +<tmpl_if name='use_internal'> + location / { + proxy_pass <tmpl_var name='rewrite_target'>; } +</tmpl_if> </tmpl_loop> - +<tmpl_if name='use_internal' op='!=' value='y'> index index.html index.htm index.php index.cgi index.pl index.xhtml; <tmpl_if name='ssi' op='==' value='y'> @@ -157,5 +165,33 @@ } } </tmpl_loop> - -} \ No newline at end of file +</tmpl_if> +} + +<tmpl_loop name="redirects"> +server { + listen <tmpl_var name='ip_address'>:80; +<tmpl_if name='ipv6_enabled'> + listen [<tmpl_var name='ipv6_address'>]:80; +</tmpl_if> + +<tmpl_if name='ssl_enabled'> + listen <tmpl_var name='ip_address'>:443 ssl; +<tmpl_if name='ipv6_enabled'> + listen [<tmpl_var name='ipv6_address'>]:443 ssl; +</tmpl_if> + ssl_certificate <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.crt; + ssl_certificate_key <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.key; +</tmpl_if> + + server_name <tmpl_var name='rewrite_domain'>; + location / { +<tmpl_if name='use_rewrite'> + rewrite ^ <tmpl_var name='rewrite_target'>$request_uri? <tmpl_var name='rewrite_type'>; +</tmpl_if> +<tmpl_if name='use_internal'> + proxy_pass <tmpl_var name='rewrite_target'>; +</tmpl_if> + } +} +</tmpl_loop> \ No newline at end of file diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index dd26e94..279ddf6 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -934,9 +934,10 @@ $vhost_data['seo_redirect_enabled'] = 0; } - $tpl->setVar($vhost_data); + // Rewrite rules + $own_rewrite_rules = array(); $rewrite_rules = array(); if($data['new']['redirect_type'] != '' && $data['new']['redirect_path'] != '') { if(substr($data['new']['redirect_path'],-1) != '/') $data['new']['redirect_path'] .= '/'; @@ -951,26 +952,45 @@ switch($data['new']['subdomain']) { case 'www': if(substr($data['new']['redirect_path'],0,1) == '/'){ // relative path + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www'] .= $data['new']['redirect_path']; + break; + } $rewrite_exclude = '((?!'.substr($data['new']['redirect_path'],0,-1).'))'; } else { // URL - check if URL is local $tmp_redirect_path = $data['new']['redirect_path']; if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); $tmp_redirect_path_parts = parse_url($tmp_redirect_path); - if($tmp_redirect_path_parts['host'] == $data['new']['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ + if(($tmp_redirect_path_parts['host'] == $data['new']['domain'] || $tmp_redirect_path_parts['host'] == 'www.'.$data['new']['domain']) && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ + // URL is local if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; $rewrite_exclude = '((?!'.$tmp_redirect_path_parts['path'].'))'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www'] .= $tmp_redirect_path_parts['path']; + break; + } else { + + } } else { + // external URL $rewrite_exclude = '(.?)'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['use_internal'] = 'y'; + } else { + + } } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); } - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), - 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], - 'rewrite_target' => $data['new']['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); - + $own_rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), + 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], + 'rewrite_target' => $data['new']['redirect_path'], + 'rewrite_exclude' => $rewrite_exclude, + 'use_rewrite' => ($data['new']['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($data['new']['redirect_type'] == 'internal' ? true:false)); + /* if(substr($data['new']['redirect_path'],0,1) == '/'){ // relative path $rewrite_exclude = '((?!'.substr($data['new']['redirect_path'],0,-1).'))'; } else { // URL - check if URL is local @@ -981,19 +1001,35 @@ if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; $rewrite_exclude = '((?!'.$tmp_redirect_path_parts['path'].'))'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www'] .= $tmp_redirect_path_parts['path']; + break; + } else { + + } } else { $rewrite_exclude = '(.?)'; + if($data['new']['redirect_type'] == 'internal'){ + + } else { + + } } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); } - $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' => $data['new']['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + $own_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' => $data['new']['redirect_path'], + 'rewrite_exclude' => $rewrite_exclude, + 'use_rewrite' => ($data['new']['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($data['new']['redirect_type'] == 'internal' ? true:false)); + */ break; case '*': if(substr($data['new']['redirect_path'],0,1) == '/'){ // relative path + if($data['new']['redirect_type'] == 'internal') $vhost_data['web_document_root_www'] .= $data['new']['redirect_path']; + break; $rewrite_exclude = '((?!'.substr($data['new']['redirect_path'],0,-1).'))'; } else { // URL - check if URL is local $tmp_redirect_path = $data['new']['redirect_path']; @@ -1009,13 +1045,15 @@ unset($tmp_redirect_path); unset($tmp_redirect_path_parts); } - $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']), + $own_rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], 'rewrite_target' => $data['new']['redirect_path'], 'rewrite_exclude' => $rewrite_exclude); break; default: if(substr($data['new']['redirect_path'],0,1) == '/'){ // relative path + if($data['new']['redirect_type'] == 'internal') $vhost_data['web_document_root_www'] .= $data['new']['redirect_path']; + break; $rewrite_exclude = '((?!'.substr($data['new']['redirect_path'],0,-1).'))'; } else { // URL - check if URL is local $tmp_redirect_path = $data['new']['redirect_path']; @@ -1031,12 +1069,14 @@ unset($tmp_redirect_path); unset($tmp_redirect_path_parts); } - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), + $own_rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], 'rewrite_target' => $data['new']['redirect_path'], 'rewrite_exclude' => $rewrite_exclude); } } + + $tpl->setVar($vhost_data); $server_alias = array(); @@ -1056,32 +1096,42 @@ // get alias domains (co-domains and subdomains) $aliases = $app->db->queryAllRecords('SELECT * FROM web_domain WHERE parent_domain_id = '.$data['new']['domain_id']." AND active = 'y' AND type != 'vhostsubdomain'"); - switch($data['new']['subdomain']) { - case 'www': - $server_alias[] = 'www.'.$data['new']['domain'].' '; - break; - case '*': - $server_alias[] = '*.'.$data['new']['domain'].' '; - break; - } + //if($data['new']['redirect_type'] == '' || $data['new']['redirect_path'] == ''){ + switch($data['new']['subdomain']) { + case 'www': + $server_alias[] = 'www.'.$data['new']['domain'].' '; + break; + case '*': + $server_alias[] = '*.'.$data['new']['domain'].' '; + break; + } + //} if(is_array($aliases)) { foreach($aliases as $alias) { - switch($alias['subdomain']) { - case 'www': - $server_alias[] = 'www.'.$alias['domain'].' '.$alias['domain'].' '; - break; - case '*': - $server_alias[] = '*.'.$alias['domain'].' '.$alias['domain'].' '; - break; - default: - $server_alias[] = $alias['domain'].' '; - break; + if($alias['redirect_type'] == '' || $alias['redirect_path'] == '') { + switch($alias['subdomain']) { + case 'www': + $server_alias[] = 'www.'.$alias['domain'].' '.$alias['domain'].' '; + break; + case '*': + $server_alias[] = '*.'.$alias['domain'].' '.$alias['domain'].' '; + break; + default: + $server_alias[] = $alias['domain'].' '; + break; + } + $app->log('Add server alias: '.$alias['domain'],LOGLEVEL_DEBUG); } - $app->log('Add server alias: '.$alias['domain'],LOGLEVEL_DEBUG); // Rewriting if($alias['redirect_type'] != '' && $alias['redirect_path'] != '') { if(substr($alias['redirect_path'],-1) != '/') $alias['redirect_path'] .= '/'; - if(substr($alias['redirect_path'],0,8) == '[scheme]') $alias['redirect_path'] = '$scheme'.substr($alias['redirect_path'],8); + if(substr($alias['redirect_path'],0,8) == '[scheme]'){ + if($alias['redirect_type'] != 'internal'){ + $alias['redirect_path'] = '$scheme'.substr($alias['redirect_path'],8); + } else { + $alias['redirect_path'] = 'http'.substr($alias['redirect_path'],8); + } + } /* Disabled the path extension if($data['new']['redirect_type'] == 'no' && substr($data['new']['redirect_path'],0,4) != 'http') { @@ -1092,29 +1142,42 @@ switch($alias['subdomain']) { case 'www': if(substr($alias['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '((?!'.substr($alias['redirect_path'],0,-1).'))'; + //$rewrite_exclude = '((?!'.substr($alias['redirect_path'],0,-1).'))'; + //if($alias['redirect_type'] == 'internal'){ + $alias['redirect_path'] = 'http://'.($vhost_data['seo_redirect_enabled'] ? $vhost_data['seo_redirect_target_domain'] : $data['new']['domain']).$alias['redirect_path']; + //} } else { // URL - check if URL is local + /* $tmp_redirect_path = $alias['redirect_path']; if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); $tmp_redirect_path_parts = parse_url($tmp_redirect_path); if($tmp_redirect_path_parts['host'] == $alias['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '((?!'.$tmp_redirect_path_parts['path'].'))'; + //$rewrite_exclude = '((?!'.$tmp_redirect_path_parts['path'].'))'; } else { - $rewrite_exclude = '(.?)'; + //$rewrite_exclude = '(.?)'; } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); + */ } - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($alias['domain']), + if($alias['redirect_type'] != 'internal'){ + if(substr($alias['redirect_path'],-1) == '/') $alias['redirect_path'] = substr($alias['redirect_path'],0,-1); + } + $rewrite_rules[] = array( 'rewrite_domain' => $alias['domain'], 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], 'rewrite_target' => $alias['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + 'use_rewrite' => ($alias['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($alias['redirect_type'] == 'internal' ? true:false)); if(substr($alias['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '((?!'.substr($alias['redirect_path'],0,-1).'))'; + //if($alias['redirect_type'] != 'internal'){ + $alias['redirect_path'] = 'http://'.($vhost_data['seo_redirect_enabled'] ? $vhost_data['seo_redirect_target_domain'] : $data['new']['domain']).$alias['redirect_path']; + //} + //$rewrite_exclude = '((?!'.substr($alias['redirect_path'],0,-1).'))'; } else { // URL - check if URL is local + /* $tmp_redirect_path = $alias['redirect_path']; if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); $tmp_redirect_path_parts = parse_url($tmp_redirect_path); @@ -1127,16 +1190,25 @@ } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); + */ } - $rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$alias['domain']), - 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], - 'rewrite_target' => $alias['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + if($alias['redirect_type'] != 'internal'){ + if(substr($alias['redirect_path'],-1) == '/') $alias['redirect_path'] = substr($alias['redirect_path'],0,-1); + } + $rewrite_rules[] = array( 'rewrite_domain' => 'www.'.$alias['domain'], + 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], + 'rewrite_target' => $alias['redirect_path'], + 'use_rewrite' => ($alias['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($alias['redirect_type'] == 'internal' ? true:false)); break; case '*': if(substr($alias['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '((?!'.substr($alias['redirect_path'],0,-1).'))'; + //if($alias['redirect_type'] != 'internal'){ + $alias['redirect_path'] = 'http://'.($vhost_data['seo_redirect_enabled'] ? $vhost_data['seo_redirect_target_domain'] : $data['new']['domain']).$alias['redirect_path']; + //} + //$rewrite_exclude = '((?!'.substr($alias['redirect_path'],0,-1).'))'; } else { // URL - check if URL is local + /* $tmp_redirect_path = $alias['redirect_path']; if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); $tmp_redirect_path_parts = parse_url($tmp_redirect_path); @@ -1149,16 +1221,25 @@ } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); + */ } - $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)' . $this->_rewrite_quote($alias['domain']), + if($alias['redirect_type'] != 'internal'){ + if(substr($alias['redirect_path'],-1) == '/') $alias['redirect_path'] = substr($alias['redirect_path'],0,-1); + } + $rewrite_rules[] = array( 'rewrite_domain' => '*' . $alias['domain'], 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], 'rewrite_target' => $alias['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + 'use_rewrite' => ($alias['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($alias['redirect_type'] == 'internal' ? true:false)); break; default: if(substr($alias['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '((?!'.substr($alias['redirect_path'],0,-1).'))'; + //if($alias['redirect_type'] != 'internal'){ + $alias['redirect_path'] = 'http://'.($vhost_data['seo_redirect_enabled'] ? $vhost_data['seo_redirect_target_domain'] : $data['new']['domain']).$alias['redirect_path']; + //} + //$rewrite_exclude = '((?!'.substr($alias['redirect_path'],0,-1).'))'; } else { // URL - check if URL is local + /* $tmp_redirect_path = $alias['redirect_path']; if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); $tmp_redirect_path_parts = parse_url($tmp_redirect_path); @@ -1171,13 +1252,18 @@ } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); + */ } - if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote(substr($alias['domain'], 2)); - else $domain_rule = '^'.$this->_rewrite_quote($alias['domain']); + if($alias['redirect_type'] != 'internal'){ + if(substr($alias['redirect_path'],-1) == '/') $alias['redirect_path'] = substr($alias['redirect_path'],0,-1); + } + if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '*.'.substr($alias['domain'], 2); + else $domain_rule = $alias['domain']; $rewrite_rules[] = array( 'rewrite_domain' => $domain_rule, - 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], - 'rewrite_target' => $alias['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], + 'rewrite_target' => $alias['redirect_path'], + 'use_rewrite' => ($alias['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($alias['redirect_type'] == 'internal' ? true:false)); } } } @@ -1200,6 +1286,9 @@ if(count($rewrite_rules) > 0) { $tpl->setLoop('redirects',$rewrite_rules); + } + if(count($own_rewrite_rules) > 0) { + $tpl->setLoop('own_redirects',$own_rewrite_rules); } //* Create basic http auth for website statistics @@ -2043,9 +2132,12 @@ $locations = array(); $islocation = false; $linecount = sizeof($lines); + $server_count = 0; for($i=0;$i<$linecount;$i++){ $l = trim($lines[$i]); + if(substr($l, 0, 8) == 'server {') $server_count += 1; + if($server_count > 1) break; if(substr($l, 0, 8) == 'location' && !$islocation){ $islocation = true; -- Gitblit v1.9.1