今天再给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;