2010-04-06 39 views
2

即時嘗試重定向"search.php?q=somethinghere""search/somethinghere/"但我做不到!我試圖發送表單「<form action="search/" method="get" name="search">」像這樣但url轉到"search/?q=somethinghere"如何使用htaccess redirectmatch與query_string?

RedirectMatch 301 ^/search.php?q=(.*)$ http://domain.com/search/$1/這也行不通。有什麼問題?

我不想在URL中輸入「?q =」。

回答

4

除非你有上面的問題一個錯字的是,你要重定向:

^/search.php?q=(.*)$ 

但收到的網址是:

search/?q=somethinghere 

(不同的是。 php在你的重定向規則中)

你可能想嘗試使用下面的重定向規則來代替:

RedirectMatch 301 ^/search?q=(.*)$ http://domain.com/search/$1/ 
+0

但我想切出「?q =」的東西..明白嗎? – 2010-04-06 15:10:38

+0

試試這個: RedirectMatch 301 ^/search /?q =(。*)$ http://domain.com/search/$1/ 問題是,你正在尋找一些與你不同的東西獲得。您的請求中沒有「.php」,因此您的規則將會錯過。 – 2010-04-06 15:18:55

+0

它沒有工作。沒有任何反應 – 2010-04-06 15:28:39

0

在客戶端執行它會更乾淨更快。使用Javascript構建表單提交上的search/query網址 - 這將爲您節省額外的請求。

然而,通過服務器端重定向,這樣做,你可以使用mod_rewriteRewriteCondQUERY_STRING作爲源:

RewriteCond %{QUERY_STRING} \bq=([^&]*)$ 
RewriteRule ^search.php$ /search/%1 [R=301] 
+0

這是在工作,但在地址欄中的URL仍然search.php?q = sss – 2010-04-06 15:14:39

+0

請確保您使用[R = 301]進行正確的重定向,包括更改URL。發佈後我編輯了一分鐘,因此您可能已複製舊版本。 – 2010-04-06 15:21:19

+0

與您更新的代碼網址變成:http://domain.com/search/nero?q=nero「?q =」仍在這裏:(( – 2010-04-06 15:28:15

0

每當我有問題的.htaccess,我總是看看這個網站第一:http://corz.org/serv/tricks/htaccess2.php#cooldenial

該網站提供了很多使用.htaccess文件做不同事情的例子和解釋。據該網站你可以嘗試這樣的:

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^search/([^/]+) http://domain.com/search.php?q=$1 [NC] 

不過,我不是一個.htaccess大師 - 所以你可能需要用它來擺弄。