【问题标题】:Cleaning GET query urls with PHP使用 PHP 清理 GET 查询 url
【发布时间】:2023-04-07 05:46:02
【问题描述】:

所以我使用 mod_rewrite 将我的 get 查询 url 从 /news?news_id=6 重写为 /news/6。但是现在,当有人使用 get 方法提交表单时,我也希望能够这样做。现在,当您提交表单时,它仍将您定向到 /news/news_id=6 而不是 /news/6,我将如何清理获取查询 url?我很确定这不能使用 mod_rewrite 来完成(如果可以,请纠正我),所以我想你需要使用 Javascript 或 PHP。我一直在尝试用 PHP 做到这一点,到目前为止我已经完成了以下工作:

 if (!empty($_GET['news_id'])) {
    $redirecturl = "/news/" . $_GET['news_id'];
    $redirecturl = str_replace(" ", "-", $redirecturl);
    header('Location: ' . $redirecturl, true, 303);
    die();
}

但是,这会导致浏览器出现错误,显示“localhost 将您重定向了太多次”。我将如何使用 PHP 完成这项任务?

谢谢。

【问题讨论】:

  • 您更改了表单元素的 action 属性。虽然如果您的表单实际上使用 GET 请求,它会被您的重写规则更改。
  • 我当前的表单元素看起来像这样
    我需要改变什么?
  • mod_rewrite 反过来工作:它重写在浏览器地址栏中输入的内容,或通过 into news?news_id=6 为您的网络服务器表单的操作作为链接发送。因此,将news/6 付诸实施并在.htaccess 中将其重写为news?news_id=6
  • 我想通了。我确信我能做到这一点的唯一方法是通过 PHP 或 JS。
  • 你不能在你的 PHP 脚本处理完表单后重定向用户吗?

标签: php html apache mod-rewrite url-rewriting


【解决方案1】:

不确定,但它必须是“获取”形式吗?如果您想要一个干净的 URL,这将是一个使用 post 方法的非常简单的示例(无需任何安全检查!)。如果是同一页面,您可以将“操作”留空:

表格代码:

<form action="" method="post">
    [Other form code ]
    <input type="hidden" name="news_id" value="6" />
</form>

流程代码:

if ($_POST && !empty($_POST['news_id'])) {
    // Do what you want with: $_POST['news_id'];
}

此外,您可以在处理表单处理的地方创建一个新的 mod_rewrite,例如:/news6/process。出于安全原因,这会更好,并且您将拥有更清晰的代码。完成处理后,设置一个会话变量,让用户知道处理是否在“/news/6”上完成。

【讨论】:

  • 对于这个项目我需要使用get作为请求方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2014-06-22
  • 2012-05-31
相关资源
最近更新 更多