Reckful
@Reckful

В каких случаях может не сработать regex «[^/]\.php(/|$)»?

Привет,
Я не очень силен в regex, но чуток посмотрел по операторам, но все таки не могу въехать...
Вообщем конфиг nginx, сайт с первым работает нормально (лишних / нет в адресе), но как только я меняю на 2й вариант, редиректит не туда куда надо. Подскажите, в каких случаях не сработает 2й вариант?
1-й вариант
location ~ \.php$ {
2-й вариант
location ~ [^/]\.php(/|$) {

И вообще какой из вариантов предпочтительней, на nginx сайте в конфигах пишут 2й вариант, а если пробежаться по github-у то гораздо чаще упоминается первый.
  • Вопрос задан
  • 406 просмотров
Пригласить эксперта
Ответы на вопрос 2
Разберем [^/]\.php(/|$)
[^/]- начало строки НЕ начинается со / ( тут коллега был не прав это именно отрицание символа)
\.php - экранирование точки то есть точка это как точка а не любой символ. ТО есть .php должно быть в урле
(/|$) -или или вертикальная черта разделитель соответственно оканчивается или на / или просто без него.

Но я бы всеже сделал более правильное выражение посколкьу регулярка подойдет и к такому урлу
/.php/
А это совсем не тру, хотя и имеет место жить.
Как минимум я бы остановился на

[^/].+\.php(/|$)
.+- Как минимум 1 знак или символ там должен быть
В результате регурярка имела бы значение следующее.
/x.php/
Но и это не все
файл со слешем не бывает, и это не правильно так что
[^/].+\.php&- тут будет соответствие тольок x.php что на мой взгляд более правильно.
Ответ написан
kotomyava
@kotomyava
Системный администратор
Это не эквивалентные варианты. Как можно сказать, какой предпочтительнее? Выбирайте тот, что нужен именно вам.

Первый вариант сработает на все uri, которые заканчиваются на .php
Во втором uri должен начинаться со слеша, и заканчиваться на .php или .php/всё что угодно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы