gpt4 book ai didi

php - 在不重定向的情况下更改响应 URL

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:19 24 4
gpt4 key购买 nike

是否可以在不执行重定向的情况下更改响应 URL?

稍微长一点的故事......

由于 HTML 表单的限制,以下内容不起作用,因为操作 URL 中的查询字符串未提交到服务器:

<?php // handler.php ?>
...
<form action="handler.php?lost=value" method="get">
<input type="text" name="filter-keyword" value="" />
<input type="submit" name="do-submit" value="Submit" />
</form>
...

所以我决定改用 post 方法并创建一个单独的过滤器处理程序脚本,它只是为“handler.php”文件构造正确的查询字符串。

<?php // handler.php ?>
...
<form action="filter-handler.php" method="post">
<input type="hidden" name="preserve-qs" value="lost=value" />
<input type="text" name="filter-keyword" value="" />
<input type="submit" name="do-submit" value="Submit" />
</form>
...

// filter-handler.php
<?php
$new_url = 'handler.php?filter-keyword=' . $_POST['filter-keyword'];
if (isset($_POST['preserve-qs']) && $_POST['preserve-qs'] != '')
$new_url .= '&' . $_POST['preserve-qs'];

header("Location: $new_url");
?>

是否可以在不执行重定向的情况下实现这一目标?

// filter-handler.php
<?php
$qs_args = array(
'filter-keyword' => $_POST['filter-keyword'];
);
if (isset($_POST['preserve-qs']) && $_POST['preserve-qs'] != '')
parse_str($_POST['preserve-qs'], $qs_args);

// Fake query string.
$_GET = $qs_args;

// handler script is blissfully unaware of the above hack.
include('handler.php');


// ???? HOW TO UPDATE QUERY STRING IN BROWSER ADDRESS BAR ????

// Following no good because it redirects...
//header("Location: $new_url");

?>

最佳答案

是也不是。

不,因为要真正真正从服务器端更改 URL,您必须进行重定向。

是的,因为您的问题还有其他解决方案。

解决方案编号。 1:

将第一个示例中的代码更改为:

<?php // handler.php ?>
...
<form action="handler.php" method="get">
<input type="hidden" name="lost" value="value" />
<input type="text" name="filter-keyword" value="" />
<input type="submit" name="do-submit" value="Submit" />
</form>
...

这应该会产生正确的 URL(使用 lost=value)。

解决方案编号。 2(丑陋的):

覆盖脚本开头的 $_GET 数组,以欺骗应用程序,使其相信 GET 参数已传递。

解决方案编号。 3(关于在不重定向的情况下更改 URL):

此解决方案可能不适合您,但它实际上模仿了更改 URL。它不在服务器端,但它实际上为用户更改了 URL。这称为 pushState(演示 here),这是 HTML5/JavaScript 功能。

如果您可以使用 JavaScript 并发出 AJAX 请求,这个解决方案可能非常适合您(例如,您可以调用任何您喜欢的 URL 并动态传递您需要的数据,甚至可以更改您要提交的表单字段的值)。

关于php - 在不重定向的情况下更改响应 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6132196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com