NGINX переписать регулярное выражение не работает правильно - PullRequest
2 голосов
/ 01 мая 2020

сообщество, у меня проблема, и я не могу найти решение. У меня есть веб-сайт, на котором вы можете открыть вещи. Вы можете использовать путь: https://localhost/open/index.htmp?id=1234 (или без индекса. html в URI). Я хочу открыть его по пути https://localhost/open/1234, поэтому я установил NGINX правило перезаписи:

rewrite "^/open/(?!\?id=.*)(.{1,})$" /open?id=$1 permanent; (I also tried last instead of permanent)

Это правило перенаправляло меня много раз, поэтому мой путь выглядел как /open/?id=&id=&id=&id=&id=1234 I также пробовал:

try_files $uri $uri/ /?id=$request_uri

Ни один из них не работал. Что я сделал не так?

1 Ответ

1 голос
/ 01 мая 2020

Вам не нужно и нельзя использовать часть (?!\?id=.*) в директиве rewrite, поскольку Nginx использует нормализованный URI при сопоставлении директив location, try_files и rewrite .

Вы могли бы сфокусировать регулярное выражение так, чтобы оно совпадало только с цифрами c ID, например:

rewrite ^/open/(\d+)$ /open/?id=$1 permanent;

Оператор регулярного выражения + совпадает с {1,}.

...