7

我正在使用 IPB 论坛。我设法使用友好的 url 和 nginx 服务器配置修改。但是,我需要将旧论坛的 URL 重定向到重定向器 php 文件,以获取主题(或论坛、成员等)的当前 URL。例如:如果 url 是 like /forum/index.php?board=23,我将重定向到 redirector.php 。

这是我当前的配置,能够在 IPB 上使用友好的 URL

    location /forum {
        try_files $uri $uri/ /forum/index.php;
        rewrite ^ /forum/index.php? last;
    }

当我在此位置块中插入 if 语句时,如下所示,我无法检索查询参数“board”。

location /forum {
        if ($arg_board != "") {
            rewrite ^ /redirector.php?q=$arg_board break;
        }
        try_files $uri $uri/ /forum/index.php;
        rewrite ^ /forum/index.php? last;
    }

这里缺少什么?

4

1 回答 1

7

您的问题与使用 break 而不是 last 有关。从文档中:

http://wiki.nginx.org/HttpRewriteModule#rewrite

last - 完成当前重写指令的处理并重新启动该过程(包括重写),并从所有可用位置搜索 URI 上的匹配项。

break - 完成当前重写指令的处理,非重写处理仅在当前位置块内继续。

由于您没有在 /forum 位置块中为 /redirector 定义处理程序,因此您的 if(..) { rewrite } 不会执行您想要的操作。使该中断成为最后一个,以便重写可以触发适当的位置块。

于 2012-06-26T10:02:59.910 回答