2011-03-28 31 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]