mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #7841 from open-sausages/pulls/4/fix-nonpublic-root
BUG Fix incorrect BASE_URL when webroot is parent of public folder
This commit is contained in:
commit
aa7aae3900
@ -107,7 +107,7 @@ if (!defined('BASE_URL')) {
|
|||||||
|
|
||||||
// Unless specified, use empty string for base in CLI
|
// Unless specified, use empty string for base in CLI
|
||||||
if (in_array(php_sapi_name(), ['cli', 'phpdbg'])) {
|
if (in_array(php_sapi_name(), ['cli', 'phpdbg'])) {
|
||||||
return "";
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine the base URL by comparing SCRIPT_NAME to SCRIPT_FILENAME and getting common elements
|
// Determine the base URL by comparing SCRIPT_NAME to SCRIPT_FILENAME and getting common elements
|
||||||
@ -116,18 +116,39 @@ if (!defined('BASE_URL')) {
|
|||||||
$scriptName = Convert::slashes($_SERVER['SCRIPT_NAME'], '/');
|
$scriptName = Convert::slashes($_SERVER['SCRIPT_NAME'], '/');
|
||||||
|
|
||||||
// Ensure script is served from public folder (otherwise error)
|
// Ensure script is served from public folder (otherwise error)
|
||||||
if (stripos($path, PUBLIC_PATH) === 0) {
|
if (stripos($path, PUBLIC_PATH) !== 0) {
|
||||||
// Get entire url following PUBLIC_PATH
|
return '';
|
||||||
$urlSegmentToRemove = Convert::slashes(substr($path, strlen(PUBLIC_PATH)), '/');
|
|
||||||
if (substr($scriptName, -strlen($urlSegmentToRemove)) === $urlSegmentToRemove) {
|
|
||||||
// Remove this from end of SCRIPT_NAME to get url to base
|
|
||||||
$baseURL = substr($scriptName, 0, -strlen($urlSegmentToRemove));
|
|
||||||
return rtrim(ltrim($baseURL, '.'), '/');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assume no base_url
|
// Get entire url following PUBLIC_PATH
|
||||||
|
$urlSegmentToRemove = Convert::slashes(substr($path, strlen(PUBLIC_PATH)), '/');
|
||||||
|
if (substr($scriptName, -strlen($urlSegmentToRemove)) !== $urlSegmentToRemove) {
|
||||||
return '';
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove this from end of SCRIPT_NAME to get url to base
|
||||||
|
$baseURL = substr($scriptName, 0, -strlen($urlSegmentToRemove));
|
||||||
|
$baseURL = rtrim(ltrim($baseURL, '.'), '/');
|
||||||
|
|
||||||
|
// When htaccess redirects from /base to /base/public folder, we need to only include /public
|
||||||
|
// in the BASE_URL if it's also present in the request
|
||||||
|
if ($baseURL
|
||||||
|
&& PUBLIC_DIR
|
||||||
|
&& isset($_SERVER['REQUEST_URI'])
|
||||||
|
&& substr($baseURL, -strlen(PUBLIC_DIR)) === PUBLIC_DIR
|
||||||
|
) {
|
||||||
|
$requestURI = $_SERVER['REQUEST_URI'];
|
||||||
|
// Check if /base/public or /base are in the request
|
||||||
|
foreach ([$baseURL, dirname($baseURL)] as $candidate) {
|
||||||
|
if (stripos($requestURI, $candidate) === 0) {
|
||||||
|
return $candidate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Ambiguous
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $baseURL;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user