diff --git a/cake/basics.php b/cake/basics.php index 2bfabd74362..53b717d7ec8 100644 --- a/cake/basics.php +++ b/cake/basics.php @@ -446,7 +446,7 @@ function env($key) { if (defined('SERVER_IIS') && SERVER_IIS === true) { return str_replace('\\\\', '\\', env('PATH_TRANSLATED')); } - break; + break; case 'DOCUMENT_ROOT': $name = env('SCRIPT_NAME'); $filename = env('SCRIPT_FILENAME'); @@ -455,20 +455,27 @@ function env($key) { $offset = 4; } return substr($filename, 0, strlen($filename) - (strlen($name) + $offset)); - break; + break; case 'PHP_SELF': return str_replace(env('DOCUMENT_ROOT'), '', env('SCRIPT_FILENAME')); - break; + break; case 'CGI_MODE': return (PHP_SAPI === 'cgi'); - break; + break; case 'HTTP_BASE': $host = env('HTTP_HOST'); - if (substr_count($host, '.') !== 1) { - return preg_replace('/^([^.])*/i', null, env('HTTP_HOST')); + $count = substr_count($host, '.'); + if ($count <= 1) { + return '.' . $host; + } elseif ($count === 2) { + $gTLD = array('aero', 'asia', 'biz', 'cat', 'com', 'coop', 'edu', 'gov', 'info', 'int', 'jobs', 'mil', 'mobi', 'museum', 'name', 'net', 'org', 'pro', 'tel', 'travel', 'xxx'); + $domainName = explode('.', $host); + if (in_array($domainName[1], $gTLD)) { + $host = '.' . $host; + } } - return '.' . $host; - break; + return preg_replace('/^([^.])*/i', null, $host); + break; } return null; } diff --git a/cake/tests/cases/basics.test.php b/cake/tests/cases/basics.test.php index 07455d0f8ff..6ba22e6b87c 100644 --- a/cake/tests/cases/basics.test.php +++ b/cake/tests/cases/basics.test.php @@ -96,7 +96,13 @@ function testEnv() { $__ENV = $_ENV; $_SERVER['HTTP_HOST'] = 'localhost'; - $this->assertEqual(env('HTTP_BASE'), ''); + $this->assertEqual(env('HTTP_BASE'), '.localhost'); + + $_SERVER['HTTP_HOST'] = 'com.ar'; + $this->assertEqual(env('HTTP_BASE'), '.com.ar'); + + $_SERVER['HTTP_HOST'] = 'example.ar'; + $this->assertEqual(env('HTTP_BASE'), '.example.ar'); $_SERVER['HTTP_HOST'] = 'example.com'; $this->assertEqual(env('HTTP_BASE'), '.example.com'); @@ -107,9 +113,21 @@ function testEnv() { $_SERVER['HTTP_HOST'] = 'subdomain.example.com'; $this->assertEqual(env('HTTP_BASE'), '.example.com'); + $_SERVER['HTTP_HOST'] = 'example.com.ar'; + $this->assertEqual(env('HTTP_BASE'), '.example.com.ar'); + + $_SERVER['HTTP_HOST'] = 'www.example.com.ar'; + $this->assertEqual(env('HTTP_BASE'), '.example.com.ar'); + + $_SERVER['HTTP_HOST'] = 'subdomain.example.com.ar'; + $this->assertEqual(env('HTTP_BASE'), '.example.com.ar'); + $_SERVER['HTTP_HOST'] = 'double.subdomain.example.com'; $this->assertEqual(env('HTTP_BASE'), '.subdomain.example.com'); + $_SERVER['HTTP_HOST'] = 'double.subdomain.example.com.ar'; + $this->assertEqual(env('HTTP_BASE'), '.subdomain.example.com.ar'); + $_SERVER = $_ENV = array(); $_SERVER['SCRIPT_NAME'] = '/a/test/test.php';