2011-03-28 40 views
5

这工作:用于搜索查询的干净网址?

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

回答

7

我认为问题在于你已经使用GET方法创建了一个HTML表单,它会自动打开你指定的URL作为结果。如果你想提交您的搜索查询像所期望的,你应该砍的形式与一些JavaScript打电话给你好看的网址是这样的:

<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> 
+0

谢谢。查看我对JavaScript的编辑。 – DADU 2011-03-28 20:29:37

+0

我不能想到另一种不涉及JavaScript的解决方案,但它必须在用户关闭他/她的JS的情况下工作,而与其他(“丑陋的”)URL一起使用。 – 2011-03-28 20:34:31

+0

毫米。它看起来并不像我想象的那样直截了当。 – DADU 2011-03-28 20:43:19

1

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

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

虽然我看起来很不起眼。也许你应该从表单中删除提交按钮并使用javascript重定向。

+0

谢谢。查看我对JavaScript的编辑。 – DADU 2011-03-28 20:29:18

+0

似乎无法正常工作。 – DADU 2011-03-28 22:11:44

2

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

+0

太棒了!太棒了!你所做的只是发布,然后让服务器重定向到GET!太好了!漂亮的网址和后退按钮。 :) – gregthegeek 2013-05-21 02:53:04

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – 2014-09-17 12:25:30

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

当然,我重定向我的形式转到search_redirect.php和瞧。这种组合的工作就像一个魅力,然后,因为我已经分页,我不必再做任何事情,因为他们都在查询字符串上使用GET,然后$ i为整数。

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