Переменная блока динамического местоположения в строку

#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 , и тогда это сработало. Большое спасибо!