Как удалить языковую часть $uri для целей try_files в nginx 1.6?

У меня есть сайт с языковыми префиксами в $uri, например:

К сожалению, из-за ограничений фреймворка, который я использую, файлы также связаны / ищутся по префиксным адресам:

Я хочу, чтобы мой nginx пробовал файлы в следующем порядке:

  1. $uri как есть
  2. /files/image.png (даже если присутствует en или ru или любой другой двухбуквенный код)
  3. /index.php чтобы получить файл, если это применимо

1. и 3. могут быть сделаны с:

location / {
    try_files $uri /index.php;
}

Я знаю о ~* команде, чтобы сказать Nginx, чтобы сделать регулярное соответствие ( источник). К сожалению, я понятия не имею, как сформулировать соответствие, чтобы опустить потенциальную группу вместо ее выбора. И попытки с переменными до и после заставили меня попытаться использовать if - конечно, я хочу избежать этого.

Я считаю, что мне не хватает чего-то относительно простого.

1 ответ

Решение

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

location ~ "^(?:/[a-z]{2})?/(.*)$" {
    try_files /$1 /index.php;
}
Другие вопросы по тегам