From bffd187e1e4fe1712a1e77683938c0564fbfbe11 Mon Sep 17 00:00:00 2001 From: Sean Harvey Date: Wed, 15 Dec 2010 04:59:54 +0000 Subject: [PATCH] ENHANCEMENT BASE_URL calculation now uses realpath() to calculate any symlinks in environment variable SCRIPT_FILENAME git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@115058 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- core/Core.php | 12 ++++++------ static-main.php | 11 ++++++----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/core/Core.php b/core/Core.php index 8011ac61f..37766a845 100755 --- a/core/Core.php +++ b/core/Core.php @@ -138,14 +138,14 @@ if(!defined('BASE_PATH')) { define('BASE_PATH', rtrim(dirname(dirname(dirname(__FILE__)))), DIRECTORY_SEPARATOR); } if(!defined('BASE_URL')) { - // Determine the base URL by comparing SCRIPT_NAME to SCRIPT_FILENAME and getting the common - // elements - if(substr($_SERVER['SCRIPT_FILENAME'],0,strlen(BASE_PATH)) == BASE_PATH) { - $urlSegmentToRemove = substr($_SERVER['SCRIPT_FILENAME'],strlen(BASE_PATH)); - if(substr($_SERVER['SCRIPT_NAME'],-strlen($urlSegmentToRemove)) == $urlSegmentToRemove) { + // Determine the base URL by comparing SCRIPT_NAME to SCRIPT_FILENAME and getting common elements + $path = realpath($_SERVER['SCRIPT_FILENAME']); + if(substr($path, 0, strlen(BASE_PATH)) == BASE_PATH) { + $urlSegmentToRemove = substr($path, strlen(BASE_PATH)); + if(substr($_SERVER['SCRIPT_NAME'], -strlen($urlSegmentToRemove)) == $urlSegmentToRemove) { $baseURL = substr($_SERVER['SCRIPT_NAME'], 0, -strlen($urlSegmentToRemove)); define('BASE_URL', rtrim($baseURL, DIRECTORY_SEPARATOR)); - } + } } // If that didn't work, failover to the old syntax. Hopefully this isn't necessary, and maybe diff --git a/static-main.php b/static-main.php index c0cfe2640..a1dc997f6 100644 --- a/static-main.php +++ b/static-main.php @@ -37,13 +37,14 @@ if ( define('BASE_PATH', rtrim(dirname(dirname(__FILE__))), DIRECTORY_SEPARATOR); } if(!defined('BASE_URL')) { - // Determine the base URL by comparing SCRIPT_NAME to SCRIPT_FILENAME and getting the common elements - if(substr($_SERVER['SCRIPT_FILENAME'],0,strlen(BASE_PATH)) == BASE_PATH) { - $urlSegmentToRemove = substr($_SERVER['SCRIPT_FILENAME'],strlen(BASE_PATH)); - if(substr($_SERVER['SCRIPT_NAME'],-strlen($urlSegmentToRemove)) == $urlSegmentToRemove) { + // Determine the base URL by comparing SCRIPT_NAME to SCRIPT_FILENAME and getting common elements + $path = realpath($_SERVER['SCRIPT_FILENAME']); + if(substr($path, 0, strlen(BASE_PATH)) == BASE_PATH) { + $urlSegmentToRemove = substr($path, strlen(BASE_PATH)); + if(substr($_SERVER['SCRIPT_NAME'], -strlen($urlSegmentToRemove)) == $urlSegmentToRemove) { $baseURL = substr($_SERVER['SCRIPT_NAME'], 0, -strlen($urlSegmentToRemove)); define('BASE_URL', rtrim($baseURL, DIRECTORY_SEPARATOR)); - } + } } }