代码之家  ›  专栏  ›  技术社区  ›  WisdomFusion

nginx重写规则不起作用?

  •  4
  • WisdomFusion  · 技术社区  · 14 年前
    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 回复  |  直到 9 年前
        1
  •  2
  •   Alexander Azarov    14 年前

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