如果 nginx 上存在查询参数,则重定向

emr*_*cer 6 forum redirect rewrite nginx ipb

我正在使用 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;
    }
Run Code Online (Sandbox Code Playgroud)

当我在这个位置块中插入一个 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;
    }
Run Code Online (Sandbox Code Playgroud)

这里缺少什么?

Mat*_*len 6

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

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

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

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

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