如何从URL中删除特定的$ _GET变量

jus*_*inl 4 php error-handling get

我有一个用PHP编写的网站,任何时候用户收到错误我会将它们重定向到另一个页面(使用header(Location:...))并将错误ID放在URL中,以便我知道要显示哪个错误.

例如,如果用户尝试访问产品页面但该项目不再可用,我将重定向回他们之前查看的项目类别,并根据我在URL中指定的错误ID显示错误.

www.example.com/view_category.php?product_category_id=4&error_id=5

我不喜欢这种方法有两件事:

  1. 它在URL中显示error_id.
  2. 如果刷新页面,则仍会显示错误.

有没有办法从URL中干净地删除特定的$ _GET变量,同时在页面加载后保留其余变量不变?

我想也许它正在使用modRewrite或重定向回到页面本身,但是从URL中删除error_id或使用$ _SESSION变量并避免将error_id放入URL中.你的意见?

我真的从这个社区中学到了很多东西,并且想过如果我提出一个问题,我可能会学到一些新的东西或得到一些不同的想法,因为我对脚本很新.

Pet*_*ley 7

不,没有办法明确地做到这一点 - 至少没有页面刷新但是你无论如何都会丢失数据.

你最好使用临时会话变量.

if ( /* error condition */ )
{
  $_SESSION['last_error_id'] = 5;
  header( 'Location: http://www.example.com/view_category.php?product_category_id=4' );
}
Run Code Online (Sandbox Code Playgroud)

然后,在view_category.php中

if ( isset( $_SESSION['last_error_id'] ) )
{
  $errorId = $_SESSION['last_error_id'];
  unset( $_SESSION['last_error_id'] );

  // show error #5
}
Run Code Online (Sandbox Code Playgroud)