如何在url中隐藏参数(query_string),但将它们发送到页面隐藏,在地址栏中不可见
例如:
我有这个:
http://localhost/index.php?sent=true
我想:
http://localhost/index.php
但我希望在PHP $ _GET中发送参数['发送']
我试图重定向到没有参数的页面(没有query_string)[R],之后给页面一些参数(静默)没有[R]重定向(不改变地址本身)
我尝试在htaccess中使用RewriteRule,使用不同的标志和不同的方式,但没有任何工作
我了解到如果我想在浏览器中更改地址,我必须在一个RewriteRule行中使用带有L标志的R标志 - 其他方式它不起作用 - 地址不会改变
但是当我使用[L]标志时我不能转到下一行(下一个RewriteRule)并将任何query_string附加到地址而没有[R]重定向
如果我没有在第一行放一个[L]标志(带[R])我没有新地址但是如果我这样做 - 我不能使用[C]标志甚至[N]旗帜
原因如下:
在我的页面上,我从表单发送成功数据后使用标题('位置:...?sent = true')功能 我重定向到?sent = true,因为我不想用户刷新页面并再次发送相同的数据
但重定向到?sent = true后我不想在地址栏中输入query_string 该页面上有更多表单将发送其他POST数据和刷新页面,其中包含这个丑陋的query_string
怎么做?
答案 0 :(得分:2)
您可以设置它,以便在完成后使用?sent=true
访问脚本时,会重定向用户
e.g。
if(!empty($_GET['sent'])&&$_GET['sent']) {
//do stuff
header("Location: http://localhost/index.php");
}
你不能用htaccess做这个,因为你需要传递给PHP,它在重定向后传递给PHP,所以如果你用htaccess重定向,那么值永远不会到达PHP。
进一步的问题是,执行此操作的唯一方法是使用javascript格式重定向用户
<?php if(!empty($_GET['sent'])&&$_GET['sent']) { ?>
<form action='http://localhost/index.php' method='post' name='frm'>
<?php
foreach ($_GET as $a => $b) {
echo "<input type='hidden' name='".$a."' value='".$b."'>";
}
?>
</form>
<script language="JavaScript">
document.frm.submit();
</script>
<?php } ?>
答案 1 :(得分:0)
Cookie可能是一种解决方案,因为您可以使用它们将数据从页面传递到页面,而且不可见,至少对于普通用户来说不容易。
或者如果可能的话,$ _SESSION也是将数据从一个页面发送到另一个页面的好方法。
答案 2 :(得分:0)
您可以在apache中分配变量:
SetEnvIf Request_URI "\sent=true$" SENT=1
然后在PHP中检索它,如:
if (isset($_SERVER['SENT'])) {
echo "Received sent variable from apache, value is " . $_SERVER['SENT'];
} else {
echo "not received sent variable from apache";
}
<强>更新强>:
您需要在 httpd.conf 文件或 .htaccess 文件中设置AllowOverride FileInfo
或AllowOverride ALL
,如下例所示:
<Directory /home>
AllowOverride FileInfo
</Directory>