nginx重写规则不起作用?

rewrite ^/index\.asp /index.php last;
rewrite ^/index\.asp\?boardid=([0-9]+)$/forum-$1-1.html last;
rewrite ^/index\.asp\?boardid=([0-9]+)(.*)$/forum-$1-1.html last;
rewrite ^/index_([0-9]+)(.*)$/forum-$1-1.html last;
rewrite ^/dispbbs\.asp\?boardID=([0-9]+)&ID=([0-9]+)$/thread-$2-1-1.html last;

我已经尝试了上面的重写规则,并得到一个死的结果,没有工作.
我参考了很多帖子和文章,没有帮助.

有什么错误吗?

V / R,
加文

感谢您的回复. 🙂

我已将我的nginx配置更改为,

rewrite ^/index\.asp$/index.php last;
rewrite ^/index\.asp\?boardid=([0-9]+)(.*)$/forum-$1-1.html last;
rewrite ^/index\.asp\?boardid=([0-9]+)$/forum-$1-1.html last;
rewrite ^/dispbbs\.asp\?boardID=([0-9]+)&ID=([0-9]+)$/thread-$2-1-1.html last;

还是行不通.但我发现规则中没有错误.

最佳答案 您无法在重写规则中匹配参数,它们可能只包含路径.原因很简单:假设参数可能有另一个顺序;假设您没有考虑其他参数(例如来自Google的关键字).

所以你的规则应该以一种匹配路径的方式重写,然后检查参数.像这样:

rewrite ^/index_([0-9]+)(.*)$/forum-$1-1.html last;

location /index.asp {
  if ($arg_boardid ~ "^([0-9]+)") {
    rewrite ^ /forum-$1-1.html break;
  }
  rewrite ^ /index.php break;
}

location /dispbbs.asp {
  rewrite ^ /thread-$arg_ID-1-1.html break;
}
点赞