"Ocultar" extensões de arquivo .html usando reescritas nginx

16

Estou exibindo um site estático via nginx, e meu objetivo é substituir os URLs que se parecem com:

http://foo.com/bar.html

com

http://foo.com/bar

A chave não é barra final. Atualmente, estou fazendo algo semelhante usando alias de localização, mas isso é tedioso porque requer um bloco de localização para cada arquivo e também acrescenta uma barra à direita, já que o nginx analisa aliases como diretórios:

    location / {
        root    /srv/www/foo/public_html;
        index   index.html;
    }

    location /bar1 {
        alias /srv/www/foo/public_html/;
        index bar1.html;
    }

    location /bar2 {
        alias /srv/www/foo/public_html/;
        index bar2.html;
    }

E assim por diante. Eu li a documentação sobre reescritas e não consigo sintetizar o que está sendo dito no que eu preciso fazer. Eu não estou voltando de um ambiente Apache; O nginx é minha primeira incursão em servidores da Web, então tenho certeza de que estou perdendo algo óbvio, pois meu background HTTP é fraco. Agradecemos antecipadamente por qualquer ajuda que você pode proporcionar.

Doug Stephen
fonte

Respostas:

17

try_files deve ser o que você quer.

Algo assim:

try_files $uri.html $uri $uri/ =404;
Shane Madden
fonte
11
Isso funcionou, com a pequena exceção de que $ uri.html estava causando um 500. Eu tive que usar "$ {uri} .html".
Doug Stephen
4
Mudá-lo para try_files $uri.html $uri/ =404;um SEO melhor seria, pois você não teria dois URLs foobar.com/bar e foobar.com/bar.html apontando para o mesmo recurso.
Khaja Minhajuddin
5

De acordo com o comentário de @Khaja, a melhor resposta é:

try_files $uri.html $uri/ =404;

Para que apenas uma cópia do recurso seja veiculada (sem extensão .html). Você não deseja dividir a força do link entre vários URLs que exibem conteúdo duplicado. Encontre a documentação aqui .

Bryce
fonte
Eu tentei isso. try_files $ uri.html $ uri / = 404; quebrou carregamento da página inicial sem nomear myURL / índice também carregamento quebrou de Css, .js etc
aspiringGuru