我的最终目标是使用php从url中剥离查询字符串。因此,在PHP更改为使用查询字符串参数之前,我不想删除它。
我想要:"http://www.mysite.com?id=3993993"
并使用PHP、使用$_GET['id']做一些事情
然后从url中删除"?id=39939939993",留下"http://www.mysite.com".
关于如何做到这一点,有什么想法吗?
您可以从$_GET
中检索值并将其存储在$_SESSION
中,然后重定向:
// Load the id from GET into SESSION
session_start();
$_SESSION['id'] = isset($_GET['id']) ? $_GET['id'] : NULL;
// Reidrect to the new URL
if (isset($_GET['id'])) {
header("Location: http://www.mysite.com");
exit();
}
// Reload the value from $_SESSION if it is there (and not also in $_GET)
if (!empty($_SESSION['id']) && !isset($_GET['id'])) {
$id = $_SESSION['id'];
// Remove it from SESSION to prevent accidental reloads
unset($_SESSION['id']);
}
您可以通过PHP函数Header
http://www.mysite.com
:
header('Location: http://www.mysite.com');
请注意,在输出任何内容后都不能执行此操作,因此如果您想根据该id生成输出,则会遇到问题。您可以将id存储在会话中,并在重定向后读取和处理它,但如果客户端禁用了cookie,这将不起作用。
执行重定向并检查引用者。为了安全起见,您也可以将其保存到cookie或$_SESSION变量中。
唯一能做到这一点的方法是让PHP"记住"id"的值,因为一旦它重定向到"mysite",它就不再有数据了。
我会使用Cookie或会话数据,即使页面刷新,这些数据也是持久的。
我会做一些类似的事情:
$_SESSION['tempid'] = $_GET['id']; //for remembering the data
header("Location: index.php"); //redirect
然后,只要你喜欢使用会话变量,你就可以引用这个变量:
$dosomethingwith = $_SESSION['tempid'];
unset($_SESSION['tempid']);
您可能需要在使用tempid 后清除会话变量
我能想到的唯一方法是捕获任何GET值,将它们存储在会话中,然后重定向到没有params集的同一页面。
if(!empty($_GET)) {
$_SESSION['GET'] = $_GET;
$url = parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);
header('Location: '.$url);
die();
}
if(!empty($_SESSION['GET'])) {
$_GET = $_SESSION['GET'];
unset($_SESSION['GET']);
}
我不建议您这样做,但是,一种解决方案可能是设置一个cookie,注册一个包含查询参数的会话变量,然后重定向用户http://www.mysite.com/?id=3993993第页至http://www.mysite.com/
<?php
session_start();
$_COOKIE['something'] = md5($whatever);
$_SESSION['query'] = $_SERVER['QUERY_STRING'];
if ($_SERVER['QUERY_STRING'] != '/')
header("Location: /");
if ( isset ($_SESSION['query']) ){
/* display your page */
}
?>
我强烈建议不要使用这一点:大多数搜索引擎机器人都不接受cookie。
我没有测试这个脚本。