Перенаправление, если параметр запроса существует на nginx

Я использую форумы IPB. Мне удалось использовать дружественные URL-адреса с модификациями конфигурации сервера nginx. Однако мне нужно перенаправить URL-адреса моего старого форума в php-файл перенаправителя, чтобы получить текущий URL-адрес темы (или форума, участника и т. д.). Например: если URL-адрес похож на /forum/index.php?board=23, я сделаю перенаправление на redirector.php.

Это моя текущая конфигурация, позволяющая использовать дружественные URL-адреса в IPB.

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

Когда я вставляю оператор if внутри этого блока местоположения, как показано ниже, я не могу получить параметр запроса «доска».

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

Чего здесь не хватает?


person emregecer    schedule 21.05.2012    source источник


Ответы (1)


Ваша проблема связана с использованием break вместо last. Из документации:

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

last — завершает обработку текущих директив перезаписи и перезапускает процесс (включая перезапись) с поиском совпадения по URI из всех доступных местоположений.

break — завершает обработку текущих директив перезаписи, а обработка без перезаписи продолжается в только блоке текущего местоположения.

Поскольку вы не определяете обработчик для /redirector в блоке местоположения /forum, ваш if(..) { rewrite } не делает того, что вы хотите. Сделайте этот перерыв последним, чтобы перезапись могла вызвать соответствующий блок местоположения.

person Matthew Franglen    schedule 26.06.2012