Marius Burkard
2015-12-31 238326c6e7528571d0e8c68f310591206256ea77
Merge branch 'master' into 'master'

maindomain of aps-instance changeable and ordered rewrite rules in apache-vhost-conf

1. maindomain in apsinstance:
Posibility to change main-domain of aps-instance over remote (in interface maind…omain is always the websites domain but over remote it's now possible to set an alias oder subdomain, that will be used in instance-settings. Important if e.g. wordpress-installation should run unter an aliasdomain instead of the websites domain)

2. append *-Rewrite-Rules to the end of rewrite-rules. With this it is possible to use
- sub.domain.tld
- *.domain.tld
together with different subdir-redirects (with the usage of redirect-type L for sub.domain.tld). Before this change it was never possible to get it always working, because it depended on the order in database if it worked or not.

See merge request !255
3 files modified
38 ■■■■ changed files
interface/lib/classes/aps_guicontroller.inc.php 20 ●●●● patch | view | raw | blame | history
interface/lib/classes/remote.d/aps.inc.php 11 ●●●● patch | view | raw | blame | history
server/plugins-available/apache2_plugin.inc.php 7 ●●●● patch | view | raw | blame | history
interface/lib/classes/aps_guicontroller.inc.php
@@ -43,7 +43,17 @@
        parent::__construct($app);
    }
    /**
     * Removes www from Domains name
     *
     * @param $filename the file to read
     * @return $sxe a SimpleXMLElement handle
     */
    public function getMainDomain($domain) {
        if (substr($domain, 0, 4) == 'www.') $domain = substr($domain, 4);
        return $domain;
    }
    /**
     * Reads in a package metadata file and registers it's namespaces
@@ -344,9 +354,9 @@
        $app->uses('tools_sites');
        $webserver_id = 0;
        $websrv = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = ?", $settings['main_domain']);
        $websrv = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain = ?", $this->getMainDomain($settings['main_domain']));
        if(!empty($websrv)) $webserver_id = $websrv['server_id'];
        $customerid = $this->getCustomerIDFromDomain($settings['main_domain']);
        $customerid = $this->getCustomerIDFromDomain($this->getMainDomain($settings['main_domain']));
        if(empty($settings) || empty($webserver_id)) return false;
@@ -565,13 +575,13 @@
            if(in_array($postinput['main_domain'], $domains))
            {
                $docroot = $app->db->queryOneRecord("SELECT document_root FROM web_domain
                    WHERE domain = ?", $postinput['main_domain']);
                    WHERE domain = ?", $this->getMainDomain($postinput['main_domain']));
                $new_path = $docroot['document_root'];
                if(substr($new_path, -1) != '/') $new_path .= '/';
                $new_path .= $main_location;
                // Get the $customerid which belongs to the selected domain
                $customerid = $this->getCustomerIDFromDomain($postinput['main_domain']);
                $customerid = $this->getCustomerIDFromDomain($this->getMainDomain($postinput['main_domain']));
                // First get all domains used for an install, then their loop them
                // and get the corresponding document roots as well as the defined
interface/lib/classes/remote.d/aps.inc.php
@@ -273,8 +273,15 @@
            return false;
        }
    
        $sql = "SELECT * FROM web_domain WHERE domain = ?";
        $domain = $app->db->queryOneRecord($sql, $params['main_domain']);
        if (substr($params['main_domain'], 0, 4) == 'www.') {
            $domain = substr($params['main_domain'], 4);
            $sql = "SELECT * FROM web_domain WHERE domain = ? AND subdomain=?";
            $domain = $app->db->queryOneRecord($sql, $domain, 'www');
        }
        else {
            $sql = "SELECT * FROM web_domain WHERE domain = ?";
            $domain = $app->db->queryOneRecord($sql, $params['main_domain']);
        }
    
        if (!$domain) {
            $this->server->fault('invalid parameters', 'No valid domain given.');
server/plugins-available/apache2_plugin.inc.php
@@ -1233,6 +1233,7 @@
        // Rewrite rules
        $rewrite_rules = array();
        $rewrite_wildcard_rules = array();
        if($data['new']['redirect_type'] != '' && $data['new']['redirect_path'] != '') {
            if(substr($data['new']['redirect_path'], -1) != '/' && !preg_match('/^(https?|\[scheme\]):\/\//', $data['new']['redirect_path'])) $data['new']['redirect_path'] .= '/';
            if(substr($data['new']['redirect_path'], 0, 8) == '[scheme]'){
@@ -1264,7 +1265,7 @@
                    'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n'));
                break;
            case '*':
                $rewrite_rules[] = array( 'rewrite_domain'  => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
                $rewrite_wildcard_rules[] = array( 'rewrite_domain'  => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
                    'rewrite_type'   => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
                    'rewrite_target'  => $rewrite_target,
                    'rewrite_target_ssl' => $rewrite_target_ssl,
@@ -1363,7 +1364,7 @@
                            'rewrite_add_path' => (substr($rewrite_target, -1) == '/' ? 'y' : 'n'));
                        break;
                    case '*':
                        $rewrite_rules[] = array( 'rewrite_domain'  => '(^|\.)'.$this->_rewrite_quote($alias['domain']),
                        $rewrite_wildcard_rules[] = array( 'rewrite_domain'  => '(^|\.)'.$this->_rewrite_quote($alias['domain']),
                            'rewrite_type'   => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
                            'rewrite_target'  => $rewrite_target,
                            'rewrite_target_ssl' => $rewrite_target_ssl,
@@ -1400,6 +1401,8 @@
        } else {
            $tpl->setVar('alias', '');
        }
        if (count($rewrite_wildcard_rules) > 0) $rewrite_rules = array_merge($rewrite_rules, $rewrite_wildcard_rules); // Append wildcard rules to the end of rules
        if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0) {
            $tpl->setVar('rewrite_enabled', 1);