>我在我的网站中创建了简单的文件路由.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。