2016-01-14 48 views
2

我有以下網址:從網址中刪除關鍵字與htaccess的

http://www.domain.com/index.php?route=product/search&search=product%20keyword%20remove 

我想使用這個htaccess的URL中移除, 「關鍵詞」。這是我迄今爲止,但沒有按預期工作:

RewriteRule ^search=(.*?)keyword(.*?)$ search=$1$2 [L,R=301,NC] 

我在做什麼錯在這裏?另外,應如何處理空間「%20」?因爲至少還有一個空格需要刪除。

有包含「關鍵詞」多的網址,但這個前後關鍵字可能會有所不同的話,那麼這就是爲什麼我有試過(。*)

感謝

+1

%20 URL字符串中的空間可以被處理在正則表達式中使用\ s。 – starkeen

+2

**我在這裏做錯了什麼?** - 您試圖與RewriteRule指令中的查詢字符串進行匹配,查詢字符串不能直接在此指令中處理,您需要將RewriteCond與%{QUERY_STRING}一起使用。 – starkeen

回答

0

下面的規則應該爲你工作的一部分:

RewriteEngine On 

RewriteCond %{THE_REQUEST} \?(.*search=[^&]*)%20keyword(\S*)\sHTTP [NC] 
RewriteRule^%{REQUEST_URI}?%1%2 [R=302,NE,L] 
+1

這個效果很好,只有一個小小的mod RewriteCond%{THE_REQUEST} \ *(。* search = [^&] *)%20keyword(\ S *)\ sHTTP [NC]關鍵字的前面。 –

+0

是的,如果你想刪除'%20',那麼的確如此:'RewriteCond%{THE_REQUEST} \?(。* search = [^&] *)%20keyword(\ S *)\ sHTTP [NC] ' – anubhava

0

來匹配一個網址查詢字符串,你也可以使用%{THE_REQUEST}變量。

RewriteCond %{THE_REQUEST} search=(.*?)keyword(.*?) [NC] 
RewriteRule^/index.php?route=product/search&search=%1%2 [L,R] 

%n是的RewriteCond的正則表達式捕獲組(S)

+0

這部分工作,這意味着它不捕獲關鍵字後的部分,所以url只被重寫直到關鍵字,刪除最後一部分。 –

+0

我試過這樣:RewriteCond%{THE_REQUEST} search =(。*?)keyword \ S(。*)$ [NC],結果是search = firstword%252020thirdword%20HTTP/1.0。所以關鍵字被刪除,但是HTTP部分被添加了什麼? –

+0

HTTP 1.0是由於正則表達式的貪婪行爲而被追加的請求字符串的最後部分,請嘗試添加一個?之後 * , **(。*?)** 。 – starkeen

相關問題