2013-07-12 61 views
1

如何從http://site.com/id555/forum666/thread777http://site.com/#id=555#forum=666#thread=777? 我試試這樣說:如何用mod_rewrite獲得乘積變量

RewriteEngine on 
RewriteRule ^/id([0-9]+)/?$ /#id=$1 [NC,NE,R=303] 
RewriteRule ^/forum([0-9]+)/?$ /#forum=$1 [NC,NE,R=303] 
RewriteRule ^/thread([0-9]+)/?$ /#thread=$1 [NC,NE,R=303] 

但所有我得到它是http://site.com/#id=555,所以我嘗試使它像這樣:

RewriteEngine on 
RewriteRule ^(/(id|forum|thread)([0-9]+))+ #$2=$3 [NC,NE,N,R=303] 

結果是http://site.com/#thread=777。一個不明白,我該如何改變規則,以正確的方式得到它。我在VirtualHost部分的主配置中使用它,因爲它對我來說很像,但如果你幫我使用.htaccess,我會這樣做。

重要提示:它可以是任意順序的URL中的任意數量的變量。 例子:

http://site.com/thread777/forum666 
http://site.com/id555/thread777 
http://site.com/forum666 
http://site.com/id555/forum666/thread777/id333/id444/forum777 

他們都必須轉變這種方式,如:

http://site.com/#thread=777#forum=666 
http://site.com/#id=555#thread=777 
http://site.com/#forum=666 
http://site.com/#id555#forum=666#thread=777#id=333#id=444#forum=777 

回答

1

我覺得你的第二個嘗試是接近。這個怎麼樣:

RewriteRule ^(.*)/(id|forum|thread)([0-9]+)(.*) $1#$2=$3$4 [N,NC,NE,R=303] 

如在規則中,N標誌使得規則的重複頻次根據需要,直到它完成。在每次迭代時,它將最右邊的/ id555組或其他變換爲#id = 555。

^(.*) =領先基,如果有的話,還沒有被轉化還

/(id|forum|thread)([0-9]+) =在該迭代

(.*) =聯動組被處理基,如果有的話,已處理

然而我認爲在此之後,領先的/可能會消失,轉換爲#。因此,您可能需要按照上述規則將其重新添加回

RewriteRule (.*) /$1 
+0

非常感謝您,正是我所需要的。第二條規則是不需要的,因爲你在前面拖動$ 1。如果沒有'RewriteRule(。*)/ $ 1',在我的服務器和瀏覽器上也沒有問題 – BASILIO