2012-11-14 36 views
0

我正在尋找重寫搜索鏈接的最佳方法。在我的網站我有:重寫搜索htaccess

http://domain.com/search.php?keyword=blue+widget&Search=Search 

我想這個落得:

http://domain.com/blue-widget 

有沒有數據庫,只是直接HTML/CSS。

在此先感謝。

回答

2

我想你想要做的事更接近這一點:

RewriteEngine On 
RewriteRule ^([a-zA-Z0-9_-]+)$ search.php?keyword=$1 
RewriteRule ^([a-zA-Z0-9_-]+)/$ search.php?keyword=$1 

賈森的回答只有一個實例的情況下工作。

UPDATE:

您可以添加更多的字符正則表達式部分,讓他們。例如,允許*,這樣做:

^([a-zA-Z0-9_-*]+)$ 

如果有人直接在URL中使用人品不好,你可以將其重定向到一個404頁。但是,如果您根據用戶輸入的內容來調用用戶的URL,則可以在將錯誤字符的值發送到以404頁爲結尾的URL並通知用戶之前,檢查其值。

+0

OP中沒有中繼動態關鍵字。儘管如此,如果是這樣的話,只要他們進行一些「關鍵字」清理即可。 –

+0

這很好Woz,謝謝。如果我使用像*這樣的字符進入主機的404頁面,我是否可以將此代碼調整到我的文件之一(如404.php),甚至只是去掉違規字符並轉到search.php? – Sara44

+0

我想你只是想添加你想接受的任何字符到正則表達式部分,如下所示:'^([a-zA-Z0-9 _- *] +)$'。我的猜測是,指定接受的字符比試圖禁止某些邪惡字符(白名單與黑名單)更安全。 – woz

0

重寫規則可以反過來工作。所以鏈接將blue-widget這將改寫爲search.php

RewriteEngine On 
RewriteBase/

RewriteRule ^/blue-widget$ /search.php?keyword=blue+widget&Search=Search [L] 

注:如果您接受額外的查詢字符串參數,你就需要使用QSA標誌。

+0

我需要以這種方式更改任何搜索參數,Jason。我可以在該規則的第一部分和第二部分使用通配符嗎?理想情況下,我也需要一些衛生消毒。 – Sara44

+0

如果'search.php'鏈接當前存在並且需要'重定向',則OP提供的示例仍然有效。無論哪種情況,您的答案都是必要的,但不排除重定向的必要性。 – clmarquart

+0

@ Sara44,我會鼓勵你更新你的問題,因爲這個需求沒有被傳達。 –