diff --git a/docs/en/04_Changelogs/4.0.0.md b/docs/en/04_Changelogs/4.0.0.md index 3b5caeba6..5dddca074 100644 --- a/docs/en/04_Changelogs/4.0.0.md +++ b/docs/en/04_Changelogs/4.0.0.md @@ -418,6 +418,13 @@ variable set-up process. This generally encouraged bad practice and should be av logic early in the bootstrap, this is best placed in the `_config.php` files. Note also that `$_FILE_TO_URL_MAPPING` has been removed and replaced with `SS_BASE_URL` env var. +This url must be an absolute url with an optional protocol. The following are valid, for example: + +``` +SS_BASE_URL="http://localhost/" +SS_BASE_URL="https://localhost/" +SS_BASE_URL="//localhost/" +``` The global values `$database` and `$databaseConfig` have been deprecated, as has `ConfigureFromEnv.php` which is no longer necessary. diff --git a/src/Control/ContentNegotiator.php b/src/Control/ContentNegotiator.php index 8e5f621c3..fd99dc69c 100644 --- a/src/Control/ContentNegotiator.php +++ b/src/Control/ContentNegotiator.php @@ -136,7 +136,7 @@ class ContentNegotiator } $negotiator = new ContentNegotiator(); - $negotiator->$chosenFormat( $response ); + $negotiator->$chosenFormat($response); } /** diff --git a/src/includes/constants.php b/src/includes/constants.php index a6419097c..27fada010 100644 --- a/src/includes/constants.php +++ b/src/includes/constants.php @@ -72,6 +72,20 @@ if (!getenv('SS_IGNORE_DOT_ENV')) { }); } +// Validate SS_BASE_URL is absolute +if (getenv('SS_BASE_URL') && !preg_match('#^(\w+:)?//.*#', getenv('SS_BASE_URL'))) { + call_user_func(function () { + $base = getenv('SS_BASE_URL'); + user_error( + "SS_BASE_URL should be an absolute url with protocol " + . "(http://$base) or without protocol (//$base)", + E_USER_WARNING + ); + // Treat as protocol-less absolute url + $base = '//' . $base; + putenv("SS_BASE_URL=$base"); + }); +} if (!defined('BASE_URL')) { define('BASE_URL', call_user_func(function () {