common_fake_local_fancy_url to remove index.php/ from a local URL
This commit is contained in:
parent
d16a883e17
commit
23e66bef64
36
lib/util.php
36
lib/util.php
@ -1391,6 +1391,42 @@ function common_path($relative, $ssl=false, $addSession=true)
|
|||||||
return $proto.'://'.$serverpart.'/'.$pathpart.$relative;
|
return $proto.'://'.$serverpart.'/'.$pathpart.$relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function common_fake_local_fancy_url($url)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This is a hacky fix to make URIs generated with "index.php/" match against
|
||||||
|
* locally stored URIs without that. So for example if the remote site is looking
|
||||||
|
* up the webfinger for some user and for some reason knows about https://some.example/user/1
|
||||||
|
* but we locally store and report only https://some.example/index.php/user/1 then they would
|
||||||
|
* dismiss the profile for not having an identified alias.
|
||||||
|
*
|
||||||
|
* There are various live instances where these issues occur, for various reasons.
|
||||||
|
* Most of them being users fiddling with configuration while already having
|
||||||
|
* started federating (distributing the URI to other servers) or maybe manually
|
||||||
|
* editing the local database.
|
||||||
|
*/
|
||||||
|
if (!preg_match(
|
||||||
|
// [1] protocol part, we can only rewrite http/https anyway.
|
||||||
|
'/^(https?:\/\/)' .
|
||||||
|
// [2] site name.
|
||||||
|
// FIXME: Dunno how this acts if we're aliasing ourselves with a .onion domain etc.
|
||||||
|
'('.preg_quote(common_config('site', 'server'), '/').')' .
|
||||||
|
// [3] site path, or if that is empty just '/' (to retain the /)
|
||||||
|
'('.preg_quote(common_config('site', 'path') ?: '/', '/').')' .
|
||||||
|
// [4] + [5] extract index.php (+ possible leading double /) and the rest of the URL separately.
|
||||||
|
'(\/?index\.php\/)(.*)$/', $url, $matches)) {
|
||||||
|
// if preg_match failed to match
|
||||||
|
throw Exception('No known change could be made to the URL.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// now reconstruct the URL with everything except the "index.php/" part
|
||||||
|
$fancy_url = '';
|
||||||
|
foreach ([1,2,3,5] as $idx) {
|
||||||
|
$fancy_url .= $matches[$idx];
|
||||||
|
}
|
||||||
|
return $fancy_url;
|
||||||
|
}
|
||||||
|
|
||||||
function common_inject_session($url, $serverpart = null)
|
function common_inject_session($url, $serverpart = null)
|
||||||
{
|
{
|
||||||
if (!common_have_session()) {
|
if (!common_have_session()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user