2013-03-14 72 views
0

我想使用url rewrite for linux lighttpd.conf但我无法获得正确的正则表达式。REGULAR EXPRESSION(url.rewrite)

我的网址是ip/cgi/aaa/bbb,我想重写url路径。我的目标是/var/www/cgi/aaa.cgi?par=bbb

我写的规则为"^/cgi/([^/]+)\/(.*)?"=> "/var/www/cgi/$1.cgi?par=$2"
但不知何故,我不能得到的参数par值。

回答

0

你的问题是因为你在输入的开始处锚定。

^/cgi 

..will不匹配ip/cgi,因为ip处于起步..不/cgi。要修复它。把ip在你有什么正面:

^ip/cgi/([^/]+)\/(.*)? 
# ^^ this part 

下面是输出一旦更改:

Regex output

+0

但ip是不同的,我怎么写规则 – MagicConch 2013-03-14 03:41:19

+0

删除锚字符'^'..它可能会工作后那。 – 2013-03-14 03:44:40

+0

但我用我的规则“^/cgi /([^/]+)\/(.*)?”=>“/var/www/cgi/$1.cgi?par=$2”,我可以去CGI但我不能得到票面价值 – MagicConch 2013-03-14 03:47:59

0

“^”在字符串的开头匹配。由于您的ip是动态的,因此尝试从“cgi”进行匹配,因为它是绝对的。

我试着在http://gskinner.com/RegExr/的输入下面工作正常。

/cgi/([^/]+)\/(.*)? 
/var/www/cgi/$1.cgi?par=$2 
ip/cgi/aaa/bbb 

结果是IP /无功/网络/ CGI/aaa.cgi?PAR = BBB

如果你不想在结果字符串 “ip”,使用

(.*)/cgi/([^/]+)\/(.*)? 
/var/www/cgi/$2.cgi?par=$3 
ip/cgi/aaa/bbb 

结果是/var/www/cgi/aaa.cgi?par=bbb(没有ip)