У меня есть сервер nginx, на котором работает одностраничное приложение, простые вещи:
server{
server_name testing001.example.com;
location / {
root /var/www/testing001;
try_files $uri /index.html;
}
}
Внутри моего каталога /var/www/testing001, помимо файлов приложения, у меня есть каталог:
\runtimes
\runtimes\1.js
\runtimes\2.js
\runtimes\3.js
...
\runtimes\default.js
Я хочу, чтобы все запросы https://testing.example.com/theRuntime.js?id = {1,2,3,4}:
location ~* ^/theRuntime\.js {
if ($arg_id != "") {
set $id $arg_id;
rewrite ^ /runtimes/$id.js last;
}
}
index.html
server{
server_name testing001.example.com;
root /var/www/testing001;
location / {
try_files $uri /index.html;
}
location = /theRuntime.js {
try_files /runtimes/$arg_id.js /runtimes/default.js =404;
}
}
Переместите root в блок server так, чтобы он обслуживал оба блока location.
Вам необходимо сопоставить один URL-адрес, поэтому используется синтаксис местоположения «точное совпадение».
Аргумент id доступен как $arg_id.
try_files проверит наличие нескольких путей под /var/www/testing001 по порядку.
Финал =404 никогда не достигается. См. try_files
Спасибо. Удивительно просто и работает как шарм