Fix unexpected behaviour in getBaseUrl

- getBaseUrl() returns info from configuration only and always append
  the suffix
- add a guessBaseUrl() to extract base_url from $_SERVER info
- fix Url::display() to take this change in consideration

Fix https://github.com/FreshRSS/FreshRSS/issues/906
Use https://github.com/FreshRSS/FreshRSS/pull/910
This commit is contained in:
Marien Fressinaud
2015-07-23 10:05:32 +02:00
parent 2e544d2c1a
commit 6db0941196
2 changed files with 31 additions and 20 deletions

View File

@@ -85,29 +85,37 @@ class Minz_Request {
}
/**
* Détermine la base de l'url
* @return la base de l'url
* Try to guess the base URL from $_SERVER information
*
* @return the base url (e.g. http://example.com/)
*/
public static function getBaseUrl($baseUrlSuffix = '') {
$conf = Minz_Configuration::get('system');
$url = $conf->base_url;
if ($url == '' || !preg_match('%^https?://%i', $url)) {
$url = 'http';
$host = empty($_SERVER['HTTP_HOST']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST'];
$port = empty($_SERVER['SERVER_PORT']) ? 80 : $_SERVER['SERVER_PORT'];
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
$url .= 's://' . $host . ($port == 443 ? '' : ':' . $port);
} else {
$url .= '://' . $host . ($port == 80 ? '' : ':' . $port);
}
if (isset($_SERVER['REQUEST_URI'])) {
$path = $_SERVER['REQUEST_URI'];
$url .= substr($path, -1) === '/' ? substr($path, 0, -1) : dirname($path);
}
public static function guessBaseUrl() {
$url = 'http';
$host = empty($_SERVER['HTTP_HOST']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST'];
$port = empty($_SERVER['SERVER_PORT']) ? 80 : $_SERVER['SERVER_PORT'];
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
$url .= 's://' . $host . ($port == 443 ? '' : ':' . $port);
} else {
$url = rtrim($url, '/\\') . $baseUrlSuffix;
$url .= '://' . $host . ($port == 80 ? '' : ':' . $port);
}
return filter_var($url . '/', FILTER_SANITIZE_URL);
if (isset($_SERVER['REQUEST_URI'])) {
$path = $_SERVER['REQUEST_URI'];
$url .= substr($path, -1) === '/' ? substr($path, 0, -1) : dirname($path);
}
return $url;
}
/**
* Return the base_url from configuration and add a suffix if given.
*
* @param $base_url_suffix a string to add at base_url (default: empty string)
* @return the base_url with a suffix.
*/
public static function getBaseUrl($base_url_suffix = '') {
$conf = Minz_Configuration::get('system');
$url = rtrim($conf->base_url, '/\\') . $base_url_suffix;
return filter_var($url, FILTER_SANITIZE_URL);
}
/**

View File

@@ -25,6 +25,9 @@ class Minz_Url {
if ($absolute) {
$url_string = Minz_Request::getBaseUrl(PUBLIC_TO_INDEX_PATH);
if ($url_string === PUBLIC_TO_INDEX_PATH) {
$url_string = Minz_Request::guessBaseUrl();
}
} else {
$url_string = $isArray ? '.' : PUBLIC_RELATIVE;
}