正则表达式的问号|nginx rewrite 匹配问号(?)

今天再给bbpcn.net添加rewrite功能时遇到一个难题。

要把这个地址http://bbpcn.net/bb-admin/admin-base.php?page=4&plugin=mass_edit

rewrite成这个http://bbpcn.net/bb-admin/admin-base.php/page/4?plugin=mass_edit

考虑到通用性我的语句为

rewrite ^/bb-admin/admin-base.php/page/([0-9]+)&plugin=(.*)$ /bb-admin/admin-base.php?page=4&plugin=$2 last;

但是reload nginx后一直在404,于是猜测是正则问题。

之前写的rewrite规则都比较简单,这次多了些特殊符号,“.”、“?”。按照我那破破的C语言水平,我试着添加转义符号“”,不过依然不起作用,开始在Google上以多个关键字搜索,终于让我找到方法了。

这个问题apache和nginx可能都存在。

只说解决方法吧。点号可以用反斜杠转义,问号后面的字符串用自带变量处理。最终我的rewrite规则改写为如下即可。

rewrite ^/bb-admin/admin-base.php/page/([0-9]+)$ /bb-admin/admin-base.php?page=$1&query_string last;