Estou tendo um pouco de dificuldade com o Nginx reescreve. Recentemente, mudei o blog para um novo mecanismo, e a estrutura da URL mudou. No meu antigo blog, as postagens do mecanismo estavam localizadas em uma URL com o formulário http://$host/yyyy/mm/title.html
. No entanto, no novo mecanismo, elas têm o formato http://$host/yyyy/mm/title/
. O arquivo real que está sendo retornado pelo servidor reside em /yyyy/mm/title/index.html
.
Para garantir que os links em postagens antigas ainda funcionem, quero fazer uma regravação no Nginx que se pareça com isso:
rewrite ^/(\d\d\d\d)/(\d\d)/(.+)\.html$ $scheme://$host/$1/$2/$3/ permanent;
Infelizmente, isso captura tudo o que termina com .html
, incluindo index.html
, portanto, visitar um URL do formulário /(\d\d\d\d/)/(\d\d)/(.+)/
causa um loop de redirecionamento (o nginx tenta internamente usar /$1/$2/$3/index.html
, que redireciona para /$1/$2/$3/
, que redireciona de volta para index.html, etc.).
Eu prefiro não usar declarações se for possível. Alguma idéia?
Para referência, o site é estático e a configuração do meu servidor é parecida com essa (nada interessante aqui):
server {
listen [::]:80;
server_name blog.samwhited.com;
root /var/www/blog.samwhited.com;
charset utf-8;
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
error_page 404 /error/404.html;
error_page 403 /error/403.html;
location /error/ { internal; }
}
Veja um exemplo rápido do comportamento de redirecionamento esperado:
link - > link
Também seria ótimo se index.html pudesse estar oculto. Nada que eu encontrei online funcionou. Então, isso também funcionaria:
link - > link