这有效:
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的人也会看到这一点。
答案 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]