去掉 ?来自表单帖子的查询字符串

时间:2010-11-26 21:38:06

标签: php url-rewriting

我有一个网址,例如:http://testsite.local/search/?q=findme,一旦有人进行查询,我的搜索页面就会显示。我使用mod_rewrite来重写一些页面,并想知道是否有可能将它变成一个很好的URL:http://testsite.local/search/1/findme/(数字1是结果集的页面)。

由于

4 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

RewriteEngine on
RewriteRule ^search/([^/\.]+)/([^/\.]+)/?$ search/?page=$1&q=$2 [L]

Here是一个包含少量信息的网页,Google对此也非常了解。

如果您想更改订单,可以交换$1$2

修改:如果您的HTML中包含以下内容:

<form id="search_form" method="get" action="search">
  <input type="text" name="q" />
  <input type="submit" value="Search" />
</form>

使用jQuery,您可以执行以下操作:

$(document).ready(function() {
  $("#search_form").submit(function(event) {
    event.preventDefault();
    window.location = "/search/1/" + escape($(this).find("input[name=q]").val())
  });
});

这将拦截表单提交并执行自定义网址,如果用户没有javascript,它仍然会以旧方式工作。

答案 1 :(得分:2)

好的,这些方法都不是我想要的,经过一些研究后我决定在页面有查询字符串时重定向到正确的页面。所以在进行搜索时,我只是这样做了:

if ($_GET["posted"] == "true") {<br />
    header("Location: /search/" . $_GET["q"] . "/1/");<br />
}

我知道该页面刚刚从表单发布,因为它有隐藏的“已发布”字段。

答案 2 :(得分:1)

使用parse_url()parse_str()

<?php
$url = 'http://testsite.local/search/?q=findme';
$parsed = parse_url($url);
var_dump($parsed);

parse_str($parsed['query'], $params);
var_dump($params);

输出:

array
  'scheme' => string 'http' (length=4)
  'host' => string 'testsite.local' (length=14)
  'path' => string '/search/' (length=8)
  'query' => string 'q=findme' (length=8)
array
  'q' => string 'findme' (length=6)

答案 3 :(得分:1)

使用.htaccess文件:

RewriteEngine On
RewriteBase /search/

#rewriting only if the request file doesn't exists (you don't want to rewrite request for images or other existing files)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)? index.php?path=$1 [L]

之后,您可以在根index.php文件中使用REQUEST_URI,并可以解析其中的字符串:

var_dump($_SERVER['REQUEST_URI']);

或者您可以使用$_GET['path']