nginx重写规则不起作用?

时间:2010-03-29 06:13:07

标签: nginx rewrite

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;

仍然无法正常工作。但我发现规则中没有错误。

1 个答案:

答案 0 :(得分:2)

您无法匹配重写规则中的参数,它们可能只包含路径。原因很简单:假设参数可能有另一个顺序;假设您没有考虑其他参数(例如来自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;
}