Проблемы с NGINX при сопоставлении частичного местоположения

#nginx #nginx-location

#nginx #nginx-местоположение

Вопрос:

Я новичок в мире NGINX и пытаюсь учиться.

Я хочу соответствовать:

  • /моя страница
  • /mypage.php

но не

  • /mypagewebsite

или что-нибудь еще, кроме предыдущих 2 совпадений

Если я использую location ^~ /mypage {} его, он также совпадает /mypagewebsite , и я пытаюсь избежать 2 блоков с точным совпадением, например location = /mypage {} , и location = /mypage.php {}

Как я мог бы сопоставить только первые 2 местоположения, не сопоставляя остальные?

Ответ №1:

Вы можете сделать это с помощью регулярных выражений (regex).

 location ~ ^/mypage(?:.php)?$ 
 

Объяснение

  • ~ Сообщает nginx, что мы используем регулярное выражение
  • ^ — Отмечает начало строки (uri должен начинаться прямо с этого момента)
  • ( и ) — Круглые скобки используются для группировки
  • ?: — Эти символы означают, что nginx не должен помнить, что находится внутри круглых скобок
  • ? — Означает, что вся группа (.php) является необязательной
  • $ — Означает конец строки (uri должен заканчиваться прямо здесь)

Вы можете использовать онлайн-инструменты для создания и проверки ваших регулярных выражений. Например, вот этот.