如何在url中隐藏参数(query_string)但将它们发送到隐藏的页面,在地址栏中不可见
示例:
我有这个:
http://localhost/index.php?sent=true
我想要:
http://localhost/index.php
但我想在 PHP $_GET['sent'] 中获取发送参数
我尝试重定向到没有参数(没有查询字符串)[R] 的页面,然后在没有 [R] 重定向(不更改地址本身)的情况下(静默地)给页面一些参数
我尝试在 htaccess 中使用不同的标志和不同的方式使用 RewriteRule 但没有任何效果
我了解到,如果我想在浏览器中更改地址,我必须在一个 RewriteRule 行中使用 R 标志和 L 标志 - 其他方式不起作用 - 地址不会更改
但是当我使用 [L] 标志时,我无法转到下一行(下一个 RewriteRule)并在没有 [R] 重定向的情况下将任何 query_string 附加到地址
如果我不在第一行放置 [L] 标志(带 [R])我没有新地址,但如果我这样做了 - 我不能使用 [C] 标志甚至 [N] 标志
原因如下:
在我的页面上,我在从表单成功发送数据后使用 header('Location: ...?sent=true') 函数 我重定向到 ?sent=true 因为我不想让用户刷新页面并再次发送相同的数据
但是在重定向到 ?sent=true 之后我不想在地址栏中有那个 query_string 该页面上有更多表单将发送其他 POST 数据并使用这个丑陋的 query_string 刷新页面
怎么做?
最佳答案
您可以设置它,以便如果您使用 ?sent=true
访问脚本,一旦它完成,它就会重定向用户
例如
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 } ?>
关于php - 在 url (htaccess) 中隐藏参数(查询字符串),但将此参数发送到页面 (php),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12731378/