非工作nginx重写规则与多个参数

我试图用nginx创build一个重写规则,它用一个参数重写一个不存在的图像uri给dynamic页面,但是失败。

/images/395.4b2a-c6b.large-red/car-image.jpg 

 /thumb.php?param1=4b2a6aa&param2=c6bc&id=395&size=large&color=red 

请求中的参数详细信息是:

 395 . 4b2a - c6b . large - red /blabla-image.jpg id . 4 char hash - 3 char hash . size - color 

颜色受限于:red | 蓝色| 绿色

尺寸也是有限的:小| 大

我的非工作重写规则是:

 location ~* \.(jpg)$ { rewrite ^/images/([0-9-]+)\.[a-zA-Z0-9]{4}+\-[a-zA-Z0-9]{3}+\.(.*)\-(.*)/(.*)$ /thumb.php?id=$1&param1=$2&param3=$3&size=$4&color=$5 last; } 

这条规则有什么问题? 有任何想法吗?

使用Nginx的1.4.2,你的位置产生一个消息的错误…

nginx:[emerg]指令“重写”不是以“;”结束 in / path / to / conf

这是因为,根据Nginx文档 …

如果正则expression式包含“}”或“;”字符,则整个expression式应该用单引号或双引号括起来。

通过将重写条件包含在引号中来修复它。

这条规则有什么问题? 有任何想法吗?

你错过了大括号。

这是工作解决scheme…

 rewrite "^/images/([0-9-]+)\.([a-zA-Z0-9]{4}+)\-([a-zA-Z0-9]{3}+)\.(.*)\-(.*)/(.*)$" /thumb.php?id=$1&param1=$2&param3=$3&size=$4&color=$5 last; 

您的解决scheme可以进一步改善,如…

 rewrite "^/images/([0-9-]+)\.([a-zA-Z0-9]{4}+)\-([a-zA-Z0-9]{3}+)\.([a-zA-Z]+)\-([a-zA-Z]+)/(.*)$" /thumb.php?id=$1&param1=$2&param3=$3&size=$4&color=$5 last;