【发布时间】:2011-05-25 23:39:27
【问题描述】:
是否可以在不执行重定向的情况下更改响应 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");
?>
【问题讨论】:
-
-
请不要在标题中写标签。
-
很遗憾,任何
GET-type 参数在提交表单时都会被清除。 -
@Tomalak 谢谢你的提示,我会记住的:-)