mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-04 05:25:01 +02:00
[ticket/11832] Fix the web path corrections
Add some real life examples to test PHPBB3-11832
This commit is contained in:
parent
3a4efa7959
commit
b06c8a80d1
@ -90,25 +90,49 @@ class phpbb_filesystem
|
||||
return $this->web_root_path;
|
||||
}
|
||||
|
||||
$path_info = $symfony_request->getPathInfo();
|
||||
// Path info (e.g. /foo/bar)
|
||||
$path_info = $this->clean_path($symfony_request->getPathInfo());
|
||||
|
||||
// Full request URI (e.g. phpBB/index.php/foo/bar)
|
||||
$request_uri = $symfony_request->getRequestUri();
|
||||
|
||||
// Script name URI (e.g. phpBB/index.php)
|
||||
$script_name = $symfony_request->getScriptName();
|
||||
|
||||
/*
|
||||
* If the path info is empty (single /), then we're not using
|
||||
* a route like index.php/foo/bar
|
||||
*/
|
||||
if ($path_info === '/')
|
||||
{
|
||||
return $this->web_root_path = $this->phpbb_root_path;
|
||||
}
|
||||
|
||||
$path_info = $this->clean_path($path_info);
|
||||
// How many corrections might we need?
|
||||
$corrections = substr_count($path_info, '/');
|
||||
|
||||
// Do not count / at start of path
|
||||
$corrections = substr_count(substr($path_info, 1), '/');
|
||||
|
||||
// When URL Rewriting is enabled, app.php is optional. We have to
|
||||
// correct for it not being there
|
||||
if (strpos($symfony_request->getRequestUri(), $symfony_request->getScriptName()) === false)
|
||||
/*
|
||||
* If the script name (e.g. phpBB/app.php) exists in the
|
||||
* requestUri (e.g. phpBB/app.php/foo/template), then we
|
||||
* are have a non-rewritten URL.
|
||||
*/
|
||||
if (strpos($request_uri, $script_name) === 0)
|
||||
{
|
||||
$corrections -= 1;
|
||||
/*
|
||||
* Append ../ to the end of the phpbb_root_path as many times
|
||||
* as / exists in path_info
|
||||
*/
|
||||
return $this->web_root_path = $this->phpbb_root_path . str_repeat('../', $corrections);
|
||||
}
|
||||
|
||||
return $this->web_root_path = $this->phpbb_root_path . str_repeat('../', $corrections);
|
||||
/*
|
||||
* If we're here it means we're at a re-written path, so we must
|
||||
* correct the relative path for web URLs. We must append ../
|
||||
* to the end of the root path as many times as / exists in path_info
|
||||
* less one time (because the script, e.g. /app.php, doesn't exist in
|
||||
* the URL)
|
||||
*/
|
||||
return $this->web_root_path = $this->phpbb_root_path . str_repeat('../', $corrections - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -62,7 +62,7 @@ class phpbb_filesystem_web_root_path_test extends phpbb_test_case
|
||||
),
|
||||
array(
|
||||
$this->phpbb_root_path . 'test.php',
|
||||
$this->phpbb_root_path . 'test.php',
|
||||
$this->phpbb_root_path . '../test.php',
|
||||
'//',
|
||||
),
|
||||
array(
|
||||
@ -75,7 +75,16 @@ class phpbb_filesystem_web_root_path_test extends phpbb_test_case
|
||||
array(
|
||||
$this->phpbb_root_path . 'test.php',
|
||||
$this->phpbb_root_path . '../../test.php',
|
||||
'////',
|
||||
'/foo/template',
|
||||
'/phpbb3-fork/phpBB/app.php/foo/template',
|
||||
'/phpbb3-fork/phpBB/app.php',
|
||||
),
|
||||
array(
|
||||
$this->phpbb_root_path . 'test.php',
|
||||
$this->phpbb_root_path . '../test.php',
|
||||
'/foo/template',
|
||||
'/phpbb3-fork/phpBB/foo/template',
|
||||
'/phpbb3-fork/phpBB/app.php',
|
||||
),
|
||||
);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user