Eu tenho uma coleção de memorandos em uma pasta /memos/items/
Um único memorando usado para conter uma instrução de inclusão SSI para uma parte do cabeçalho HTML, até e incluindo a abertura <body>
, seguida pelo código HTML do conteúdo da nota , e no final um outro SSI incluir declaração para o rodapé que continha o código para fechar o documento HTML, da seguinte forma:
<!--# include file="/memos/header.html" -->
Dies ist ein <i>Testeintrag</i>.
<blockquote>
Man soll den Tag
nicht vor dem Abend loben
</blockquote>
<!--# include file="/memos/footer.html" -->
Isso funciona muito bem, mas não gosto das instruções SSI no arquivo de item único. Eu preferiria instruir o nginx para servir o cabeçalho e o rodapé automaticamente, com uma configuração semelhante a
location ~ /memos/[\w-]+$ {
sendfile /memos/before.html;
sendfile $request_filename;
sendfile /memos/after.html;
}
Isso é possível? Existe um módulo nginx fornecendo uma diretiva sendfile
que funciona como descrito?
As vantagens seriam:
- A pasta que contém os itens contém apenas o conteúdo puro, nenhuma diretiva adicional. Ao fornecer uma função "Pesquisar", a pasta poderia, portanto, ser
grep
ed.
- A redundância é evitada (as instruções "include" para cabeçalho e rodapé existem apenas uma vez, não em cada arquivo duplicado.
EDIT (2016/07/01)
Enquanto isso, encontrei uma solução com SSI com os pontos de vantagem acima (isto é, fornecendo apenas os arquivos de itens, sem tags ssi), simplesmente alterando a perspectiva: Em vez de incluir cabeçalho e rodapé em cada arquivo de item individual, Eu incluo o arquivo de item em um único modelo mestre.
Inspirado pela proposta no site nginx ; Eu configuro
location /memos/ {
ssi on;
default_type text/html;
location ~ /memos/([\w-]+)$ {
set $inc /memos/items/$1;
rewrite ^ /memos/template.html break;
}
}
e use a variável $inc
no mestre template.html
:
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
...
</head>
<body>
<div id="content">
<!--# include file="$inc" -->
</div>
<script src="main.js"></script>
<script src="items.js"></script>
</body>
</html>
No entanto, não irei fechar este tópico, pois ainda estou interessado na pergunta original sobre se é possível instruir o nginx a compor uma resposta como uma sequência de vários arquivos.