idna convert the whole URI for uri's in docroot as redirect, fixes #1654

Signed-off-by: Michael Kaufmann (d00p) <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann (d00p)
2016-09-22 07:46:50 +02:00
parent 98c8f519a6
commit 9799e05ce4
4 changed files with 14 additions and 4 deletions

View File

@@ -67,6 +67,16 @@ class idna_convert_wrapper
}
}
public function encode_uri($to_encode)
{
if (version_compare("5.6.0", PHP_VERSION, ">=")) {
return $this->_do_action('encode', $to_encode);
} else {
$to_encode = $this->is_utf8($to_encode) ? $to_encode : utf8_encode($to_encode);
return $this->idna_converter->encodeUri($to_encode);
}
}
/**
* Decode a domain name, a email address or a list of one of both.
*

View File

@@ -860,7 +860,7 @@ class apache extends HttpConfigBase
$domain['documentroot'] = trim($domain['documentroot']);
if (preg_match('/^https?\:\/\//', $domain['documentroot'])) {
$corrected_docroot = $this->idnaConvert->encode($domain['documentroot']);
$corrected_docroot = $this->idnaConvert->encode_uri($domain['documentroot']);
// Get domain's redirect code
$code = getDomainRedirectCode($domain['id']);
@@ -881,7 +881,7 @@ class apache extends HttpConfigBase
$vhost_content .= ' RewriteRule ^/(.*) ' . $corrected_docroot . '$1' . $modrew_red . "\n";
$vhost_content .= ' </IfModule>' . "\n";
$vhost_content .= ' <IfModule !mod_rewrite.c>' . "\n";
$vhost_content .= ' Redirect ' . $code . ' / ' . $this->idnaConvert->encode($domain['documentroot']) . "\n";
$vhost_content .= ' Redirect ' . $code . ' / ' . $corrected_docroot . "\n";
$vhost_content .= ' </IfModule>' . "\n";
} else {

View File

@@ -430,7 +430,7 @@ class lighttpd extends HttpConfigBase
if (preg_match('/^https?\:\/\//', $domain['documentroot'])) {
$vhost_content .= ' url.redirect = (' . "\n";
$vhost_content .= ' "^/(.*)$" => "' . $this->idnaConvert->encode($domain['documentroot']) . '$1"' . "\n";
$vhost_content .= ' "^/(.*)$" => "' . $this->idnaConvert->encode_uri($domain['documentroot']) . '$1"' . "\n";
$vhost_content .= ' )' . "\n";
} else {

View File

@@ -470,7 +470,7 @@ class nginx extends HttpConfigBase {
// if the documentroot is an URL we just redirect
if (preg_match('/^https?\:\/\//', $domain['documentroot'])) {
$uri = $this->idnaConvert->encode($domain['documentroot']);
$uri = $this->idnaConvert->encode_uri($domain['documentroot']);
if (substr($uri, -1) == '/') {
$uri = substr($uri, 0, -1);
}