6

这有效:

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

4

6 回答 6

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>
于 2011-03-28T20:15:32.070 回答
2

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

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

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

于 2011-03-28T20:12:55.820 回答
2

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

于 2013-02-07T16:27:41.940 回答
0

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

于 2011-03-29T15:21:08.193 回答
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]
于 2014-01-01T07:06:12.400 回答
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]

于 2015-10-25T06:54:04.953 回答