从脸书重定向导致错误,因为添加了地址结尾



>我在我的网站中创建了简单的文件路由.php并创建了切换到文件取决于 url 的开关。我的路由.php如下所示:

<?php
$request = $_SERVER['REQUEST_URI'];
// $request = substr($request, 0, strpos($request, "?"));
switch ($request) {
case '/' :
require_once 'index.php';
break;
case '/o-inwestycji' :
require_once 'about.php';
break;
case '/galeria' :
require_once 'gallery.php';
break;
case '/lokalizacja' :
require_once 'localisation.php';
break;
case '/kontakt' :
require_once 'contact.php';
break;
case '/login' :
require_once 'login.php';
break;
}
?>

我的问题是我什么时候会在Facebook上发送指向网站的链接。当用户单击链接Facebook添加以链接URL中的其他参数时,我的url如下所示:

www.example.com/login?fbclid=IwAR3xVjfqiDVOiqc9p3b2wtl5gL_OBvlLN3aWTWgWMiHGEgIx8TagsGxHkqI

该机制会导致我的网站出错,用户被重定向到空白页。我试图在?后删除所有字符,但这并不总是很好。你能帮我解决这个问题吗?谢谢!

问题与:

$request = substr($request, 0, strpos($request, "?"));

是如果没有?存在,strpos计算为 false 并按照您希望字符串长度0出现。 例如,与

echo substr('test', 0, false);

您可以更改它,以便在使用前检查是否有?

$request = strpos($request, "?") !== FALSE ? substr($request, 0, strpos($request, "?")) : $request;

此外,还应向switch添加default案例,以便在未发生匹配时,用户最终会到达预期位置。

您可能会摆脱:

case '/' :
require_once 'index.php';
break;
case '/login' :
require_once 'login.php';
break;

并使用:

default:
require_once 'login.php';

在所有其他情况之后。您可以在此处阅读有关此内容的更多信息,https://www.php.net/manual/en/control-structures.switch.php。

相关内容

最新更新