2015-06-19 113 views
1

我想清除我的URL。php抓取URL中的所有GET变量,并将它们作为POST变量发送回相同的URL

当别人打我的网站,他们通常来是这样的:

www.site.com/webpage/?var1=1 & VAR2 = 2 & VAR3 = 3

是有可能抓住所有这些GET变量,将它们作为POST发送,重新加载页面,抓取所有新发送的POST变量来清理url?

所以要访问该页面的用户,到底它只是看起来像www.site.com/webpage/

+0

你可以使用卷曲。 – CodeGodie

+0

为什么你不使用.htaccess重写URL? – nomistic

+0

另一种方法是将这些变量设置为会话 – nomistic

回答

3

GET参数保存到会话变量中,并重定向回到没有任何参数的URL。在没有参数的情况下调用时,从会话中获取参数。

session_start(); 
if (empty($_GET) && isset($_SESSION['_GET'])) { 
    // This is the page after the redirect, copy the session variable back into $_GET 
    $_GET = $_SESSION['_GET']; 
} elseif (!empty($_GET)) { 
    // When called with parameters, copy $_GET into a session variable 
    $_SESSION['_GET'] = $_GET 
    // and then redirect to the page with no parameters 
    header("Location: /webpage/"); 
    exit(); 
} 
unset($_SESSION['_GET']); // So it's only used once 
// Use $_GET in the rest of the script as normal 
+0

所以这将自动获取URL中传递的任何变量,并发送他们的职位?我不必添加每个唯一的变量? – themike

+0

没有POST。重定向时,它是另一个GET请求,但第二个请求没有任何URL参数。这就是为什么我将它们全部保存在会话变量中,并在重定向后将其复制回'$ _GET'。 – Barmar

+0

对不起noob问题,那么如何获得新的空网址页面上的所有变量? – themike

0

不,你不能让浏览器发送任何重定向代码POST请求 - 这将被需要。

第二件事:发送POST请求将禁用缓存,并不断激怒使用浏览器后退按钮的用户,“是否要再次发送该数据”。

最好的办法是避免将不喜欢的东西放入URL(也称为URL设计)中,但除了不喜欢之外,该URL与其他任何东西一样好或坏。