Commit 238326c6 authored by Marius Burkard's avatar Marius Burkard
Browse files

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
parents 982cb630 a639ee6c
......@@ -43,7 +43,17 @@ class ApsGUIController extends ApsBase
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 @@ class ApsGUIController extends ApsBase
$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 @@ class ApsGUIController extends ApsBase
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
......
......@@ -273,8 +273,15 @@ class remoting_aps extends remoting {
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.');
......
......@@ -1233,6 +1233,7 @@ class apache2_plugin {
// 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 @@ class apache2_plugin {
'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 @@ class apache2_plugin {
'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 @@ class apache2_plugin {
} 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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment