2013-10-04 48 views
2

我一直無法獲得重定向工作。我希望有行爲將重定向來自:htaccess重定向「/?id =(.*)」,但只在根?

www.mysite.com/?id=12345 

www.mysite.com/?other_id=12345 

我寫的規則似乎抓住任何URL匹配快結束的時候,如:

www.mysite.com/directory/another/?id=12345 

我只是希望這能夠在根層面上工作,而不是在所有層面上工作。

我目前擁有的規則如下:

RewriteCond %{QUERY_STRING} ^(.*&)?id=([^&]+)$ 
RewriteRule ^(.*)$ http://%{SERVER_NAME}/?other_id=%2 [R=301,L] 

出於某種原因,我不得不包括第一正則表達式,因爲它不是沒有它接受它。如果沒有第一^(。* &)它不停地說,該網站是創建一個重定向,將無法正常工作,並轟炸了,這可能是我的問題的一部分。

有沒有更好的方式來寫這個規則?或僅僅是一個根級匹配不可能?

謝謝

此Silvertiger

回答

2

變化從^(.*)$你的正則表達式`^ $``:

RewriteCond %{QUERY_STRING} ^(.*&)?id=([^&]+)$ 
RewriteRule ^$ http://%{SERVER_NAME}/?other_id=%2 [R=301,L] 

^(.*)$正則表達式的任何請求匹配的URI,所以//foo/dir1/dir2/dir3/file.txt將全部匹配。但^$只匹配/

+0

這工作就像一個魅力,謝謝。正則表達式..呃。 – Silvertiger

+0

你救了我的命,謝謝你的回答:) – lolbas