Эффект конечного вопросительного знака (?) В URI замены директивы nginx rewrite

Я пытаюсь понять разницу между rewrite ^ / search /(.*)$ /search.php?q=$1 и перепишите ^ / search /(.*)$ /search.php?q=$1?. Отличие заключается в завершающем ? в замещающем URI.

Если URI запроса - / search / apple? Opt = 123 , то как этот URI переписывается по-другому?

Я предполагаю для rewrite ^ / search /(.*) $ /search.php?q=$1 это будет /search.php?q=apple&opt=123 и для rewrite ^ / search /(.*)$ /search.php ? q = $ 1? это будет /search.php?q=apple ? Но я не уверен.

3
задан 12 July 2021 в 12:01
1 ответ

Согласно https://nginx.org/r/rewrite .. .

Если строка замены включает новые аргументы запроса, аргументы предыдущего запроса добавляются после них. Если это нежелательно, поставьте вопросительный знак в конце заменяющей строки , чтобы избежать их добавления.

Вот минимальный код для проверки этого сценария ...

# configuration file /etc/nginx/nginx.conf:
events {}

http {
    server {
        rewrite ^/search/(.*)$ /search.php?q=$1 permanent;
        # rewrite ^/search/(.*)$ /search.php?q=$1? permanent;
    }
}

Постоянный флаг добавлен только для тестирования. Мы можем сохранить приведенный выше код как nginx.conf и запустить Nginx. Вывод curl для приведенного выше кода подтверждает, что / search / apple? Opt = 123 перенаправляет на /search.php?q=apple&opt=123 .

Аналогично, для второго условия перезаписи ...

# configuration file /etc/nginx/nginx.conf:
events {}

http {
    server {
        # rewrite ^/search/(.*)$ /search.php?q=$1 permanent;
        rewrite ^/search/(.*)$ /search.php?q=$1? permanent;
    }
}

curl вывод для приведенного выше кода подтверждает, что / search / apple? 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? Но я не уверен.

Вы правы, и это ожидаемый результат.

2
ответ дан 28 July 2021 в 11:53

Теги

Похожие вопросы