清除搜索查询的网址?

时间:2011-03-28 20:06:36

标签: php .htaccess search clean-urls

这有效:

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的人也会看到这一点。

6 个答案:

答案 0 :(得分:7)

我认为问题在于您使用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>

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

虽然看起来很漂亮的贫民区。也许您应该从表单中删除提交按钮并使用javascript重定向。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

没有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]

答案 5 :(得分:0)

我保持

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");
} 
?>

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

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