Согласно https://nginx.org/r/rewrite...
Если строка замены включает новые аргументы запроса,
предыдущие аргументы запроса добавляются после них. Если это
нежелательно, поставив вопросительный знак в конце строки замены
избегает их добавления
Вот минимальный код для проверки этого сценария...
# файл конфигурации /etc/nginx/nginx.conf:
События {}
http {
сервер {
переписать ^/search/(.*)$ /search.php?q=$1 навсегда;
# переписать ^/search/(.*)$ /search.php?q=$1? постоянный;
}
}
Постоянный флаг добавляется только для тестирования. Мы можем сохранить приведенный выше код как nginx.conf
и запустите Nginx. завиток
вывод для приведенного выше кода подтверждает /поиск/яблоко?opt=123
перенаправит на /search.php?q=яблоко&opt=123
.
Аналогично, для второго условия перезаписи...
# файл конфигурации /etc/nginx/nginx.conf:
События {}
http {
сервер {
# переписать ^/search/(.*)$ /search.php?q=$1 на постоянный;
переписать ^/search/(.*)$ /search.php?q=$1? постоянный;
}
}
завиток
вывод для приведенного выше кода подтверждает /поиск/яблоко?opt=123
перенаправит на /search.php?q=яблоко
.
Так,
Если URI запроса — /search/apple?opt=123, то как URI переписываются по-другому?
Я предполагаю, что для перезаписи ^/search/(.)$ /search.php?q=$1 будет
/search.php?q=apple&opt=123 и для перезаписи ^/search/(.)$
/search.php?q=$1? это будет /search.php?q=apple? Но я не уверен.
Вы правы, и это ожидаемый результат.