Это не отвечает на вопрос - пожалуйста, прочитайте комментарий с дополнительной информацией Я оставляю этот ответ для размещения других вариантов переписывания, пригодных для других ситуаций.
Вы можете сделать это проще:
# At "server" level, NOT in "location"
rewrite ^/forum/index.php
/forum/vbseo301.php?action=thread&oldid=$arg_topic?
last;
? Суффикс говорит Nginx не добавлять оригинальные аргументы к новому URL.
Sidenote
Кстати, если вы делаете статическое сопоставление одного набора идентификаторов другому, есть более эффективное решение:
http {
map $arg_topic $new_topic_id {
default 1;
2 3;
4 65;
}
server {
# some directives (server_name, listen, etc.) omitted
rewrite ^/forum/index.php /forum/new.php?topic=$new_topic_id? last;
# locations omitted
}
}
map
принимает первый параметр (в данном случае topic
из строки запроса) и просматривает таблицу. Затем он присваивает результат второму параметру (new_topic_id
). Два преимущества:
- Поиск очень эффективен, так как Nginx создает хеш-таблицу.
- Поиск происходит только тогда, когда вы собираетесь использовать
new_topic_id
(ленивая оценка)