php - 在 url (htaccess) 中隐藏参数(查询字符串),但将此参数发送到页面 (php)

标签 php .htaccess mod-rewrite redirect hide

如何在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/

相关文章:

apache - 如何使用 htaccess 在 apache 服务器上设置 post_max_size(出现内部服务器错误)

.htaccess - 用一行 htaccess 让 URL 变得漂亮

php - 使用 htaccess 从 index.php 重定向到 another.php 文件

regex - Apache - 重定向到相同的 URL 但附加了查询字符串

php - 将 SVG 用于 Wordpress Logo

php - 使用 php 并从 mySQL 调用值我试图调用包含 METAL GOLD 的每 16 行

.htaccess - FF 中的音频控制进进出出,OGG 和 .htaccess 已修改

apache - 为什么RewriteCond%{REQUEST_FILENAME}!-d是必需的?

php - 文件获取内容无法打开未经授权的流

php - 在 Linux 服务器中更改文件上传大小