#nginx
Вопрос:
Я пытаюсь сгенерировать один location
блок nginx, который динамично меняется в зависимости от захваченного совпадающего местоположения
location ~*/(w )/archive {
fancyindex_footer "/fancyindex/footer-{$1}.html";
}
Поэтому, если местоположение /something/archive
такое, я хочу, чтобы строка гласила /fancyindex/footer-something.html
Это простой запрос, но я изо всех сил пытаюсь его выполнить или даже могу отладить
Комментарии:
1. Вы уверены
fancyindex_footer
, что директива принимает переменные как часть своего параметра? Вы пробовали использовать статическое имя файла для отладки?2. Статическая строка работает
Ответ №1:
Ну, я кое-что проверил. Действительно, fancyindex_footer
директива не может интерполировать переменные из своего параметра. Скорее всего , причина в том, что он основан на add_after_body
директиве от ngx_http_addition_module
, и что тоже нельзя этого делать. Однако при использовании именованной группы захвата должен сработать следующий обходной путь:
location ~* /(?<idx>w )/archive {
# by using a named capture group, we make our prefix to be captured with the
# '$idx' variable rather than '$1' one, to be used later in the other location
add_after_body /fancyindex/;
# '/fancyindex/` string treated as a subrequest URI
}
location /fancyindex/ {
# don't allow external access, use only as internal location
internal;
# use the full path to the 'fancyindex' folder as a root here
root /full/path/to/fancyindex;
# rewrite any URI to the '/footer-$idx.html' and serve it as a footer file
rewrite ^ /footer-$idx.html break;
}
Если я неправильно понял ваш вопрос, и вы просто хотите добавить /fancyindex/footer-something.html
строку в вывод вместо /fancyindex/footer-something.html
содержимого файла, измените внутреннее расположение на
location /fancyindex/ {
internal;
return 200 "/fancyindex/footer-$idx.html";
}
Комментарии:
1. Спасибо, что попробовали это , я действительно хочу, чтобы fancyindex загрузился
fancyindex_footer
, используя ваш второй вариант, он просто печатает «/fancyindex/footer-placeholder.html»; в файл, но я хочу отобразить html, а не просто поместить его в виде строки2. Чем плох первый пример? Он должен делать именно то, о чем вы просите.
3. Подождите, вы правы, я добавил полный корневой путь
fancyindex
, и тогда это сработало. Большое спасибо!