如何使用mod_rewrite获取多个变量

时间:2013-07-12 12:14:33

标签: url mod-rewrite apache2 config virtualhost

如何从http://site.com/id555/forum666/thread777http://site.com/#id=555#forum=666#thread=777制作? 我试过这种方式:

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,我就会这样做。

重要提示:可以按任意顺序在网址中输入任意数量的变量。 例子:

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 个答案:

答案 0 :(得分: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