mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00: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
2 changed files with 45 additions and 12 deletions
|
@ -90,25 +90,49 @@ class phpbb_filesystem
|
||||||
return $this->web_root_path;
|
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 === '/')
|
if ($path_info === '/')
|
||||||
{
|
{
|
||||||
return $this->web_root_path = $this->phpbb_root_path;
|
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), '/');
|
* If the script name (e.g. phpBB/app.php) exists in the
|
||||||
|
* requestUri (e.g. phpBB/app.php/foo/template), then we
|
||||||
// When URL Rewriting is enabled, app.php is optional. We have to
|
* are have a non-rewritten URL.
|
||||||
// correct for it not being there
|
*/
|
||||||
if (strpos($symfony_request->getRequestUri(), $symfony_request->getScriptName()) === false)
|
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(
|
array(
|
||||||
$this->phpbb_root_path . 'test.php',
|
$this->phpbb_root_path . 'test.php',
|
||||||
$this->phpbb_root_path . 'test.php',
|
$this->phpbb_root_path . '../test.php',
|
||||||
'//',
|
'//',
|
||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
|
@ -75,7 +75,16 @@ class phpbb_filesystem_web_root_path_test extends phpbb_test_case
|
||||||
array(
|
array(
|
||||||
$this->phpbb_root_path . 'test.php',
|
$this->phpbb_root_path . 'test.php',
|
||||||
$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…
Add table
Reference in a new issue