Я пытаюсь понять разницу между 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
? Но я не уверен.
Согласно 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? Но я не уверен.
Вы правы, и это ожидаемый результат.