2011-08-29 50 views
0

我試着以取代舊式的URL到新的用戶友好只能用的.htaccess重定向循環問題:舊式的網址,以新的用戶友好的URL

例如domain.com/dir/?id=101 -> domain.com/dir/robots

應該由用戶或searchbots舊鏈接(?id=...)訪問並重定向到新的一個有301狀態碼,當然應該由新的URL來訪問。

我的.htaccess:

Options +FollowSymlinks 
RewriteEngine on 
RewriteBase /dir/ 

RewriteRule ^robots/?$ ?id=101 [L] 

RewriteCond %{QUERY_STRING} ^id=101$ 
RewriteRule ^$ robots? [R=301,L] 

它返回重定向循環,效果顯着。

不幸的是,我不能修改CMS引擎,所以唯一的解決方案是使用.htaccess規則來做到這一點。

我google了很多,但沒有找到任何工作的解決方案,這個問題。

任何想法?

謝謝!

解決

好吧,隨機魔法一點點,我發現的解決方案:在條件RewriteCond %{ENV:REDIRECT_STATUS}沒有空間!=200後:

RewriteRule ^robots/?$ ?id=101 [L] 

RewriteCond %{ENV:REDIRECT_STATUS} !=200 
RewriteCond %{QUERY_STRING} ^id=101$ 
RewriteRule ^$ robots? [R=301,L] 

重要。與空間它不工作。

+0

對於你的第二規則(301重定向) - 增加一個條件:只有當URL尚未改寫重定向 - 檢查'%{} THE_REQUEST'變量(它應該包含'GET/ID = 101 HTTP/1.1'或類似的東西)。現在你知道要搜索什麼了。 – LazyOne

回答

0
Options +FollowSymlinks 
RewriteEngine on 
RewriteBase /dir/ 

RewriteRule ^robots/?$ ?id=101 [L] 

RewriteCond %{QUERY_STRING} ^/id=101$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/dir/robots? [R=301,L] 
相關問題