你好,我目前正在使用php生成一个带有自己构建的CMS系统的菜单。
我正在与以下内容建立动态链接:$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."/";
然后我从数据库中添加. $row_menu['page_link']
。起初它运行得很完美:
例如=
$row_menu['page_link'] = page2;
$url . $row_menu['page_link'];
它将作为示例返回:http://example.com/page2
但当我再次点击时,它会再次添加第2页,如下所示:http://example.com/page2/page2
我该如何防止这种情况发生?
提前感谢!
因为第一次你的$_SERVER['REQUEST_URI']
会像http://example.com
,但当用户点击链接时,$_SERVER['REQUEST_URI']
的值会变成http://example.com/page2
。这就是为什么它会追加两次。
相反,你可以像一样使用HTTP_REFERER
$url = $_SERVER['HTTP_REFERER'].$row_menu['page_link'];
考虑到你的$_SERVER['HTTP_REFERER']
将导致http://example.com
。你也可以像一样尝试
$protocol = 'http';
$url = $protocol .'//'. $_SERVER['HTTP_HOST'] .'/'. $row_menu['page_link'];
REQUEST_URI将为您提供example.com之后的任何内容,因此请将其全部排除在外。
$url = $_SERVER['HTTP_HOST'] . "/" . $row_menu['page_link'];
您可以在此处找到$_SERVER引用的完整列表。
试试这个:
$requested_uri = $_SERVER['REQUESTED_URI'];
$host = $_SERVER['HTTP_HOST'];
$uri_segments = explode('/',$requested_uri);
$row_menu['page_link'] = 'page2';
if($row_menu['page_link'] == $uri_segments[sizeof($uri_segments)-1]) {
array_pop($uri_segments);
}
$uri = implode('/',$uri_segments);
$url = 'http://'.$host.'/'.$uri.'/'.$row_menu['page_link'];
echo $url;