使用PHP更改URL

时间:2011-09-28 19:10:03

标签: php url url-rewriting

e.g。我的页面有网址http://mysite.com?page=3&var=10,页面上也有表格。

当表单在php中提交了一些操作但我需要在提交表单之后删除此?page=3&var=10以某种方式通过PHP而不是mod_rewrite与所有浏览器兼容吗?

6 个答案:

答案 0 :(得分:1)

这是一个老话题,但是为了以后其他人都在搜索这个,你可以使用javascript replaceState来更改历史记录和浏览器栏标签。一个简单的PHP函数来做到这一点:

function set_url( $url )
{
    echo("<script>history.replaceState({},'','$url');</script>");
}

然后只需使用所需的url调用此函数(可能会删除post变量):

set_url("http://example.com");

在调用另一个页面后,页面重新加载或返回现在将在历史记录中包含新的URL位置。

我认为使用POST可能是一个更优雅的解决方案,但如果你必须使用GET,这是一个解决方法。

答案 1 :(得分:0)

这对你有用吗?

header('Location:/');

答案 2 :(得分:0)

是的,解决方案非常简单(即使不是真正的SEO友好):

<?php
 header("Location: http://mysite.com")
?>

仅供参考......为什么需要它?

答案 3 :(得分:0)

如果您正在使用action=index.php,则所有值都将发布到索引php,?page=3&var=10将自动删除。

如果您想发布到同一页面,可以使用'action = index.php?page = 3&amp; var = 10'或action=<?php echo $_SERVER['PHP_SELF'] ?>

您可以在页面开头检查提交的内容,然后使用header('Location: http://www.example.com/');重定向到您想要的内容。有关标题函数的更多信息http://php.net/manual/en/function.header.php

答案 4 :(得分:0)

使用parse_str将查询字符串作为易于修改的关联数组。然后使用http_build_query将关联数组转换为查询字符串。

$queryString = $s['QUERY_STRING'];
$params = array();
parse_str($queryString, $params);
//change $params as needed
$queryString = http_build_query($params);
if ($queryString) {
  $queryString = '?'.$queryString;
}
return preg_replace("/\\?.*/s","",$s['REQUEST_URI']).$queryString;

preg_replace("/\\?.*/s","",$s['REQUEST_URI'])删除原始查询字符串,允许您替换它。

答案 5 :(得分:-1)

mod_rewrite不会影响用户浏览器地址栏中显示的内容,除非重写执行外部可见的重定向。否则它只会重写Web服务器中的内容,而这对用户来说是不可见的。

如果您想影响用户的地址栏,则必须在表单处理完毕后通过header('Location: ...')进行重定向。