我可以只使用PHP而不是.htaccess修改url吗


Can I modify the url using only PHP, not .htaccess?

我的最终目标是使用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

p>您可以重定向到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。

我没有测试这个脚本。