【问题标题】:rewrite url when a form is submitted提交表单时重写 url
【发布时间】:2011-11-14 00:36:43
【问题描述】:

关于使用 htaccess 进行重定向的问题。在 GET 搜索表单提交中,我得到以下网址:

http://www.example.com/search/?criteria=foo&filter=all&date=all&submit=search&page=1

以上工作正常。然后我的 htaccess 中有这个重写规则:

RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/$ search.php?criteria=$2&filter=$3&date=$4&submit=$1&page=$5 [L]

以上也可以正常工作。它允许我在搜索结果中使用以下结构:

http://www.example.com/search/foo/title/all/1/

现在我的问题是,当我单击提交时,我希望它使用新的更清晰的 url 结构,但是它使用带有问号和等号的更混乱的结构。现在我自动在想,也许我必须在 PHP 中进行重定向,但是如果我可以使用 htaccess 来做,我会更开心,因为这意味着代码更简洁。

我也知道我可以通过拦截点击并创建对 seo 友好的 url 来使用 JavaScript 来做到这一点,但如果他们是使用 htaccess 的方式,我更愿意这样做。

希望您了解我想要实现的目标,非常感谢您的阅读,

fl3x7

p.s 我对 htaccess 很陌生,所以如果你能解释/指导等,那就太好了

【问题讨论】:

  • 是否有您不能的原因,例如,POST 到 search 并让它将您重定向到 search/foo/title/all/1/?
  • @stslavik 感谢您的评论。这就是我最初想做的事情,但是我只是想如果我可以使用 htaccess 来完成它会更酷,如果他们无法使用 htaccess 来完成,我很可能会这样做:)
  • .htaccess 仅在浏览器发送请求后处理请求。由于浏览器将 GET 字符串组合为?key=val[&key2=val2[...]],因此在将 URL 写入浏览器时,htaccess 甚至都没有发挥作用。对不起,伙计。

标签: php .htaccess redirect get form-submit


【解决方案1】:

使用 seo 网址进行搜索绝对没有什么好看的。
谷歌人不太可能比你聪明,但他们使用标准查询字符串方式进行搜索。因为其他所有搜索方式都很难看

【讨论】:

    【解决方案2】:

    您可能应该使用 Javascript 执行此操作,但是您可以通过使用重定向在 htaccess 中执行此操作。我想应该是这样的:

    RewriteRule ^search\.php?criteria=(.*)&date=(.*)&filter=(.*)&page=(.*)&submit=([^&])* /search/$1/$3/$2/$5/$4 [R=302, L]
    

    我希望这会起作用,因为查询字符串的值应该按字母顺序到达。

    但是,请注意:这可能行不通,因此请仅将其视为尝试的建议。

    【讨论】:

      【解决方案3】:

      您不能仅使用 .htaccess 来做到这一点。

      您可以使用 javascript 来实现(拦截 onclick 事件,使用用户输入的数据构造 url 字符串,然后将页面重定向到此 url),但考虑到 javascript 在客户端运行,这并不可靠。

      我的建议是为此使用 PHP。该过程是相同的,但我将使用 POST 而不是 GET 作为表单的方法。在页面呈现之前,检测$_POST 数据并使用它构造$url。然后将页面重定向到$url,使用header("Location: ".$url); 最好在此之后使用exit();,以确保在进行重定向时不会执行它下面的代码。

      【讨论】:

        【解决方案4】:

        如果没有 Javascript,你无法做到这一点。

        使用 GET 方法的 HTML 表单将在查询字符串中发送表单值。
        没有办法告诉它把值放在路径中。

        【讨论】:

          猜你喜欢
          • 2015-04-12
          • 2023-04-03
          • 1970-01-01
          • 2019-05-26
          • 2014-08-22
          • 2013-04-24
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多