Регулярное выражение ^/([^/?&:'"]+)$
соответствует всему, что начинается с /
и содержит любой символ, кроме /
, ?
, &
, :
, '
и "
.
Первый символ является значимым, поскольку он означает, что он будет соответствовать только URI, которые содержат один элемент пути (например, /foo
и /index.php
), но не будет соответствовать URI, которые содержат другой /
(например, /foo/
, /foo/bar
и /foo/index.php
).
Другие символы, вероятно, являются ошибкой, поскольку ?
и &
вряд ли встретит оператор location
, так как Nginx использует нормализованный URI с удаленной строкой запроса.
Нет необходимости исключать .php
из этого регулярного выражения.
URI, заканчивающиеся на .php
обычно обрабатываются другим блоком местоположения регулярного выражения (например, location ~ \.php$
).
Блоки местоположения регулярного выражения оцениваются по порядку, пока не будет найдено совпадение, поэтому необходимо убедиться, что блок location ~ \.php$
поместил над блоком местоположения регулярного выражения в вашем вопросе.