ftimme
2012-11-02 49229af7ce00b59bd41081418c9c06f34ab6d7b8
- I'm rewriting the way nginx handles rewrites/redirects. WORK IN PROGRESS!
8 files modified
208 ■■■■ changed files
interface/web/sites/form/web_aliasdomain.tform.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/form/web_domain.tform.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/form/web_subdomain.tform.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/templates/web_aliasdomain_edit.htm 6 ●●●● patch | view | raw | blame | history
interface/web/sites/templates/web_domain_redirect.htm 4 ●●● patch | view | raw | blame | history
interface/web/sites/templates/web_subdomain_edit.htm 6 ●●●● patch | view | raw | blame | history
server/conf/nginx_vhost.conf.master 44 ●●●●● patch | view | raw | blame | history
server/plugins-available/nginx_plugin.inc.php 142 ●●●● patch | view | raw | blame | history
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',
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',
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',
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();
interface/web/sites/templates/web_domain_redirect.htm
@@ -57,17 +57,19 @@
                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();
                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');
            }
        });
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();
server/conf/nginx_vhost.conf.master
@@ -23,13 +23,21 @@
        }
</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>
</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>
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']),
                    $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);
                        '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']),
                    $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);
                        '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,6 +1096,7 @@
        
        // 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'");
        //if($data['new']['redirect_type'] == '' || $data['new']['redirect_path'] == ''){
        switch($data['new']['subdomain']) {
            case 'www':
                $server_alias[] = 'www.'.$data['new']['domain'].' ';
@@ -1064,8 +1105,10 @@
                $server_alias[] = '*.'.$data['new']['domain'].' ';
                break;
        }
        //}
        if(is_array($aliases)) {
            foreach($aliases as $alias) {
                if($alias['redirect_type'] == '' || $alias['redirect_path'] == '') {
                switch($alias['subdomain']) {
                    case 'www':
                        $server_alias[] = 'www.'.$alias['domain'].' '.$alias['domain'].' ';
@@ -1078,10 +1121,17 @@
                        break;
                }
                $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']),
                            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'],
                                    'rewrite_exclude'    => $rewrite_exclude);
                                '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);
                                '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;