Nginx Регулярное местоположение, экранирование переднего сл sh? - PullRequest
1 голос
/ 21 января 2020

Nginx использует механизм PCRE для оценки регулярных выражений, состояние документации , что разделитель / не используется, поэтому нам не нужно экранировать передний sla sh / в URI, как мы можем сделать в стандартном регулярном выражении. Пример действительного nginx регулярного выражения: location ~* /myapp/.+\.php$

НО следующий код экранирует переднюю команду sh

location ~ ^\/(?:index|core\/ajax\/update|ocs\/v2|ocm-provider\/.+)\.php(?:$|\/)

Что именно означает \/ в этом контексте и зачем это нужно, если в документации указано иное?

1 Ответ

2 голосов
/ 21 января 2020

Хотя Nginx не требует экранирования переднего слэ sh /, он также не запрещает экранировать его, как мы могли бы избежать любого другого персонажа.

Первая цель специального символа regex \ предназначена для экранирования следующего символа, и поэтому nginx просто переводит / сопоставляет \/ в /, как если бы оно переводило / соответствовало \j в литерал j (пример не имеет смысла, тем не менее \j соответствует литералу j).

Одной из целей экранирования косой черты в контексте nginx может быть переносимость кода.

Обратите внимание, что \, за которым следует символ, вероятно, имеет другое значение, чем просто экранирование последующего символа, полный список доступен здесь

Источник: @monkeyzeus и @ комментарии ричарда-смита

...