e.g。我的页面有网址http://mysite.com?page=3&var=10
,页面上也有表格。
当表单在php中提交了一些操作但我需要在提交表单之后删除此?page=3&var=10
以某种方式通过PHP而不是mod_rewrite与所有浏览器兼容吗?
答案 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: ...')
进行重定向。