Как удалить языковую часть $uri для целей try_files в nginx 1.6?
У меня есть сайт с языковыми префиксами в $uri, например:
К сожалению, из-за ограничений фреймворка, который я использую, файлы также связаны / ищутся по префиксным адресам:
- http://www.example.com/files/image.png (это допустимо и ожидается)
- http://www.example.com/en/files/image.png
- http://www.example.com/ru/files/image.png
Я хочу, чтобы мой nginx пробовал файлы в следующем порядке:
$uri
как есть/files/image.png
(даже если присутствует en или ru или любой другой двухбуквенный код)/index.php
чтобы получить файл, если это применимо
1. и 3. могут быть сделаны с:
location / {
try_files $uri /index.php;
}
Я знаю о ~* команде, чтобы сказать Nginx, чтобы сделать регулярное соответствие ( источник). К сожалению, я понятия не имею, как сформулировать соответствие, чтобы опустить потенциальную группу вместо ее выбора. И попытки с переменными до и после заставили меня попытаться использовать if
- конечно, я хочу избежать этого.
Я считаю, что мне не хватает чего-то относительно простого.
1 ответ
Предполагая, что языковая часть представляет собой строку из двух строчных символов, этого можно достичь с помощью:
location ~ "^(?:/[a-z]{2})?/(.*)$" {
try_files /$1 /index.php;
}