"Nascondi" estensioni di file .html utilizzando riscritture nginx


16

Sto offrendo un sito statico tramite nginx e il mio obiettivo è quello di sostituire gli URL che sembrano:

http://foo.com/bar.html

con

http://foo.com/bar

La chiave non è una barra finale. Attualmente sto facendo qualcosa di simile usando gli alias di posizione, ma questo è noioso perché richiede un blocco di posizione per ogni file e aggiunge anche una barra finale poiché nginx considera gli alias come directory:

    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 così via. Ho letto la documentazione sulle riscritture e non riesco a sintetizzare ciò che viene detto in ciò di cui ho bisogno. Non vengo da uno sfondo di Apache; nginx è la mia prima incursione nei server Web, quindi sono sicuro che mi manca qualcosa di ovvio poiché il mio background HTTP è debole. Grazie in anticipo per qualsiasi aiuto tu possa fornire.

Risposte:


17

try_files dovrebbe essere quello che vuoi.

Qualcosa come questo:

try_files $uri.html $uri $uri/ =404;

1
Questo ha funzionato, con la minima eccezione che $ uri.html stava causando un 500. Ho dovuto usare "$ {uri} .html".
Doug Stephen,

4
Cambiarlo in try_files $uri.html $uri/ =404;SEO sarebbe meglio saggio, in quanto non avresti due URL foobar.com/bar e foobar.com/bar.html che puntano alla stessa risorsa.
Khaja Minhajuddin

5

Per il commento di @Khaja, la risposta migliore è:

try_files $uri.html $uri/ =404;

In questo modo viene offerta una sola copia della risorsa (quella senza estensione .html). Non vuoi dividere la forza del tuo collegamento su più URL che offrono contenuti duplicati. Trova la documentazione qui .


Ci ho provato try_files $ uri.html $ uri / = 404; ha interrotto il caricamento della homepage senza nominare myurl / index ha anche interrotto il caricamento di .css, .js ecc.
aspiringGuru
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.