处理完成后删除URL中的GET参数(不使用POST),PHP

处理完成后删除URL中的GET参数(不使用POST),PHP,php,html,url,get,Php,Html,Url,Get,我有这样的urlhttp://localhost/join/prog/ex.php 当我使用GET方法时,url地址如下http://localhost/join/prog/ex.php?name=MEMORY+2+GB,价格=20,数量=2,代码=1,搜索=add 我的问题是: 因此,我仍然使用GET方法,但我想在GET方法中的处理完成后,将url返回(删除参数)到http://localhost/join/prog/ex.php,如前所述(不使用POST方法)。我怎样才能做到呢? 如果你使用

我有这样的url
http://localhost/join/prog/ex.php

当我使用GET方法时,url地址如下
http://localhost/join/prog/ex.php?name=MEMORY+2+GB,价格=20,数量=2,代码=1,搜索=add

我的问题是:
因此,我仍然使用GET方法,但我想在GET方法中的处理完成后,将url返回(删除参数)到
http://localhost/join/prog/ex.php
,如前所述(不使用POST方法)。我怎样才能做到呢?

如果你使用Apache,考虑使用.MadieReWrTE的.HTAccess文件。
快速入门。我认为这个结果也可以在iis上通过web.config文件获得,我猜在调用url后,您希望重定向到文件ex.php,但这次没有任何参数。 为此,请尝试在ex.php中使用以下代码

<?
if($_GET['name']!='' || $_GET['price']!='' ||$_GET['quantity']!='' ||$_GET['code']!='' || $_GET['search']!=''){ 

/* here the code checks whether the url contains any parameters or not, if yes it will execute parameters stuffs and it will get redirected to the page http://localhost/join/prog/ex.php without any parameters*/

/* do what ever you wish to do, when the parameters are present. */

echo $name;
print $price;
//etc....

$location="http://localhost/join/prog/ex.php";
echo '<META HTTP-EQUIV="refresh" CONTENT="0;URL='.$location.'">';
exit;
}
else{
 /* here rest of the body i.e the codes to be executed after redirecting or without parameters.*/
echo "Hi no parameters present!";
}
?>


在这里,您所做的只是将重定向重定向到同一页面,而不检查查询字符串中是否有任何参数。代码智能地检查是否存在参数,id是否存在任何参数,它将重定向到ex.php,否则将打印“Hi no parameters present!”字符串

将其放入HTML文件(HTML5)中


if(typeof window.history.pushState=='function'){
window.history.pushState({},“Hide”,“http://localhost/join/prog/ex.php");
}
或者使用后端解决方案,例如使用会话

<?php
    session_start();

    if (!empty($_GET)) {
        $_SESSION['got'] = $_GET;
        header('Location: http://localhost/join/prog/ex.php');
        die;
    } else{
        if (!empty($_SESSION['got'])) {
            $_GET = $_SESSION['got'];
            unset($_SESSION['got']);
        }

        //use the $_GET vars here..
    }

简单答案

只需将其放在所需文件的顶部,即可使GET查询在加载后从浏览器的URL栏中消失

<script>    
    if(typeof window.history.pushState == 'function') {
        window.history.pushState({}, "Hide", '<?php echo $_SERVER['PHP_SELF'];?>');
    }
</script>

if(typeof window.history.pushState=='function'){
window.history.pushState({},“Hide”,“”);
}

您可以使用
可移动的\u query\u args
过滤器

add_filter( 'removable_query_args', function( $vars ) {
        $vars[] = 'name';
        $vars[] = 'price';
        $vars[] = 'quantity';
        $vars[] = 'code';
        $vars[] = 'search';

        return $vars;
    } );
但是您应该为您的案例添加特定的条件,否则,它也将从您站点上的所有其他URL中删除这些Get参数。
更多信息

您可以执行标题重定向,但目的是什么?而不丢失变量?我不明白你为什么会这么做,但不管怎样,html5pushState@pekka:无重定向,但我想在使用完GET方法后删除参数(仅删除参数)Brad,有时候,人们的需求您不理解(这与您无关)。我的网站只使用一个页面,它是使用ajax动态操作的。我的网页基本上从未刷新过。我现在需要发送一封电子邮件,其中包含一个链接,单击该链接后,将直接导航到站点的某个分区并加载一个对象。通过电子邮件,我不能使用javascript。所以我不能向我的页面发送帖子。这意味着我必须发送一个GET。但由于页面从未刷新,因此GET参数将永远留在地址中,并在按下F5时引发问题。底线是:当我们提问时,我们需要答案。不是意见。仅仅因为他试图做的在你的项目中没有意义并不意味着在他们的项目中没有意义。你也可以说我的项目不好,我应该有不同的页面,而不是一个ajax刷新页面。。。但同样,你会谈论一些你不知道的事情。我没有启动这个项目,也没有选择使用这样的框架。我已经从其他人那里接手了这个项目,现在我要坚持下去。所以请。给出答案,而不是意见。谢谢。
if(typeof window.history.pushState=='function'){window.history.pushState({},“Hide”,“http://localhost/join/prog/ex.php);}
。JS解决方案只能在兼容HTML5的浏览器中使用。后端版本在任何情况下都能工作。
if(typeof window.history.pushState=='function'){window.history.pushState({},“Hide”,“examplePage.php”);}
这很好,谢谢解决方案:安全性错误:操作不安全。或者要留在当前页面,请添加到url
strtok($\u SERVER[“REQUEST\u URI”],“?”)
否则您只需获取网页(example.com)的url,例如
window.history.pushState({},“Hide”,“”)
add_filter( 'removable_query_args', function( $vars ) {
        $vars[] = 'name';
        $vars[] = 'price';
        $vars[] = 'quantity';
        $vars[] = 'code';
        $vars[] = 'search';

        return $vars;
    } );