Как преобразовать mod_rewrite (опция QSA) в эквивалент Nginx?

Я хочу преобразовать следующее правило mod_rewrite в эквивалент Nginx:

RewriteRule ^foo/(.*)$ /bar/index.php?title=$1 [PT,L,QSA]
RewriteRule ^foo/*$ /bar/index.php [L,QSA]

Пока у меня есть:

rewrite ^foo/(.*)$ /bar/index.php?title=$1&$query_string last;
rewrite ^foo/?$ /bar/index.php?$query_string break;

Проблема в том (я думаю!), что строка запроса не добавляется. Я не нашел способа перенести аргумент QSA в Nginx.


person jumoel    schedule 11.11.2008    source источник


Ответы (2)


QSA выполняется автоматически в NGINX.

Если вы этого не хотите, добавьте ? до конца вашего нового местоположения

переписать ^/foo/bar/index.php? прошлой;

person Mikeage    schedule 04.01.2009
comment
Это верно. Документы (по адресу http://nginx.org/en/docs/http/ngx_http_rewrite_module.html ) сказать: если строка замены включает новые аргументы запроса, предыдущие аргументы запроса добавляются после них. (Примечание: если это нежелательно, поставив вопросительный знак в конце строки замены, вы избежите их добавления) - person Zoltan; 04.08.2016

Эти правила перезаписи заставили скрипты работать:

rewrite ^/foo/([^?]*)(?:\?(.*))? /bar/index.php?title=$1&$2;
rewrite ^/foo /bar/index.php;
person jumoel    schedule 11.11.2008