【问题标题】:Clean URLs for search query?清除搜索查询的 URL?
【发布时间】:2011-07-24 18:47:41
【问题描述】:

这行得通:

HTML

<a href="/search/querystring">query</a>

htaccess

RewriteRule ^search/([-0-9a-z]+)$ /search.php?q=$1 [L]

浏览搜索表单:

<form method="get" action="/search">
<input type="search" name="q" value="querystring" />
<input type="submit" />
</form>

这可以通过 htaccess 实现还是我需要在 search.php 中使用 PHP 重定向?

期望的实际结果示例:http://twitter.com/search/hello

编辑

我不希望依赖 JavaScript 来执行此操作,因此搜索引擎和禁用 JavaScript 的人也会看到这一点。

【问题讨论】:

    标签: php .htaccess search clean-urls


    【解决方案1】:

    我认为您实际上必须创建一个单独的重写规则,该规则本质上是您上面的重写规则,但相反。然后把它放在你的第一个重写规则之上。

    RewriteRule ^/search?q=([-0-9a-z]+)$ /search/$1 [NC]
    RewriteRule ^search/([-0-9a-z]+)$ /search.php?q=$1 [L]
    

    不过对我来说似乎很贫民区。也许您应该从表单中删除提交按钮并使用 javascript 重定向。

    【讨论】:

      【解决方案2】:

      我认为问题在于您使用 GET 方法创建了一个 HTML 表单,它会自动以您指定的结果方式打开 URL。如果你想提交你想要的搜索查询,你应该用一些 JavaScript 破解表单来调用你漂亮的 URL,如下所示:

      <form method="get" action="/search/" onsubmit="return false;">
      <input type="search" name="q" value="querystring" />
      <input type="submit" onclick="window.location.href=this.form.action + this.form.q.value;" />
      </form>
      

      【讨论】:

      • 我想不出另一种不涉及 JavaScript 的解决方案,尽管它必须在用户关闭他/她的 JS 的情况下工作,只需使用另一个(“丑陋”)URL。
      • 毫米。它看起来不像我想象的那么简单。
      • 是的,不幸的是,根据我的经验,没有 JS 是不可能的。在关闭的 JavaScript 上回退到常规 URL 不是一种可行的方法吗?
      • 经过一些改编和修改后工作。也许我最终会找到别的东西,但这是一个很好的解决方案!打算用它。
      • 大家好。没有submit button怎么办?我只有forminput
      【解决方案3】:

      对于试图仅使用 mod_rewrite(不使用 JavaScript)解决此问题的所有人,请参阅此问题:Redirect and rewrite with mod_rewrite

      【讨论】:

        【解决方案4】:

        看看这个技巧 this 页。诀窍是将表单发送给自己(或者我猜你可以重定向到中间页面),并使用服务器端逻辑使用干净的 URL 进行重定向。

        【讨论】:

        • 太棒了!太棒了!您所做的只是发布,然后让服务器重定向到 GET!好的!漂亮的 URL 和后退按钮不错。 :)
        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
        【解决方案5】:

        没有 JAVASCRIPT 的示例

        将您的搜索表单操作设置为“searchredirect.php”并将名称输入到“q”。

        创建一个名为 searchredirect.php 的新 php 文件,并且只有以下代码:

        <?php  
        if (isset($_GET['q'])){  
        $url = $_GET['q'];  
        header("location: search/".$url);  
        } else {  
        header("location: search");
        } 
        ?>
        

        将您的原始搜索页面命名为“searchclean.php”

        在您的 .htaccess 文件中有以下重写规则:

        RewriteRule ^search/([^/]*)$ /searchclean.php?q=$1 [L]
        

        【讨论】:

          【解决方案6】:

          我只是保留

          RewriteRule ^search/([^/\.]+)/?$ search.php?q=$1 [L]

          在我的 .htaccess 中,我使用下面给出的代码创建了 search_redirect.php:

          <?php  
          if (isset($_GET['q'])){  
          $url = $_GET['q'];  
          header("location: search/".$url);  
          } else {  
          header("location: search");
          } 
          ?>
          

          然后我当然将我的表单重定向到转到 search_redirect.php 和瞧。这种组合就像一个魅力,然后因为我有分页,所以我不需要做更多的事情,因为他们都在查询字符串上使用 GET,然后用 $i 来表示整数。

          RewriteRule ^search/([^/\.]+)/page/([^/\.]+)?$ search.php?q=$1&amp;pn=$2 [L]

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-11-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-30
            • 1970-01-01
            • 1970-01-01
            • 2022-11-11
            相关资源
            最近更新 更多