【问题标题】:Change URL using PHP使用 PHP 更改 URL
【发布时间】:2011-09-28 19:10:03
【问题描述】:

例如我有带有 url http://mysite.com?page=3&var=10 的页面,页面上也有表单。

当表单提交时,php 中有一些操作,但我需要在表单提交后删除这个?page=3&var=10,有没有办法通过 PHP 与所有浏览器兼容而无需 mod_rewrite?

【问题讨论】:

  • 使用 POST 而不是 GET 将隐藏您提交的表单中的参数。
  • 为什么不将表单转换为使用 POST 那么首先在 url 中将没有参数。或者只是之后重定向。
  • 此参数来自页面分页而不是表单。

标签: php url url-rewriting


【解决方案1】:

这是一个老话题,但以防万一其他人在未来搜索这个,您可以使用 javascript replaceState 来更改历史记录和浏览器栏标签。一个简单的 php 函数来做到这一点:

function set_url( $url )
{
    echo("<script>history.replaceState({},'','$url');</script>");
}

然后只需使用所需的 url 调用此函数(可能会删除 post 变量):

set_url("http://example.com");

页面重新加载或调用另一个页面后的返回现在将在历史记录中具有新的 url 位置。

我认为使用 POST 可能是一个更优雅的解决方案,但如果您必须使用 GET,这是一种解决方法。

【讨论】:

    【解决方案2】:

    如果您使用action=index.php,则所有值都将发布到索引php,?page=3&amp;var=10 将被自动删除。

    如果您想发布到同一页面,您可以使用 'action=index.php?page=3&var=10' 或 action=&lt;?php echo $_SERVER['PHP_SELF'] ?&gt;

    您可以在页面开头检查是否提交了某些内容,然后使用header('Location: @987654321@'); 重定向到您想要的任何内容。更多关于标题功能http://php.net/manual/en/function.header.php

    【讨论】:

    • PHP_SELF 是 php script 的名称,与 $_SERVER['REQUEST_URI'] 中的实际 uri 路径相反,它们在性质和用途上完全不同。因此,PHP_SELF 在更改 original url 时不是有用的信息,因为单个 php 脚本可以代表数千个不同的 url 路径...否决。
    【解决方案3】:

    是的,解决方案很简单(即使不是真正的 SEO 友好):

    <?php
     header("Location: http://mysite.com")
    ?>
    

    仅供参考...您为什么需要它?

    【讨论】:

    • 如果我使用 header 我必须使用 exit 杀死中间的脚本;或死;
    • 即使我不这样做,它仍然只是重定向到空页面并从头开始重新启动它,而没有来自表单的 $_POST
    • 为什么在重定向浏览器之前不能简单地处理$_POST 数据?
    • 这是我正在寻找的解决方案。谢谢!
    【解决方案4】:

    使用parse_str 将查询字符串作为易于修改的关联数组获取。然后使用http_build_query将关联数组转换为查询字符串。

    $queryString = $s['QUERY_STRING'];
    $params = array();
    parse_str($queryString, $params);
    //change $params as needed
    $queryString = http_build_query($params);
    if ($queryString) {
      $queryString = '?'.$queryString;
    }
    return preg_replace("/\\?.*/s","",$s['REQUEST_URI']).$queryString;
    

    preg_replace("/\\?.*/s","",$s['REQUEST_URI']) 删除原始查询字符串允许您替换它。

    【讨论】:

      【解决方案5】:

      这对你有用吗?

      header('Location:/');
      

      【讨论】:

        【解决方案6】:

        mod_rewrite 不能影响用户浏览器地址栏中显示的内容,除非重写执行外部可见重定向。否则它只会重写网络服务器中的东西,而这对用户是不可见的。

        如果您想影响用户的地址栏,您必须在表单处理完毕后通过header('Location: ...') 进行重定向。

        【讨论】:

          猜你喜欢
          • 2023-04-08
          • 1970-01-01
          • 1970-01-01
          • 2012-10-19
          • 2012-08-20
          • 2015-10-04
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          相关资源
          最近更新 更多