"Sembunyikan" .html ekstensi file menggunakan penulisan ulang nginx

16

Saya melayani situs statis melalui nginx, dan tujuan saya adalah mengganti URL yang terlihat seperti:

http://foo.com/bar.html

dengan

http://foo.com/bar

Kuncinya adalah tidak ada garis miring. Saat ini saya sedang melakukan sesuatu yang mirip dengan menggunakan alias lokasi tetapi ini membosankan karena memerlukan blok lokasi untuk setiap file, dan itu juga menambahkan garis miring karena nginx melihat alias sebagai direktori:

    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;
    }

Dan seterusnya. Saya telah membaca dokumentasi tentang penulisan ulang, dan sepertinya saya tidak dapat mensintesis apa yang dikatakan untuk apa yang saya butuhkan. Saya tidak datang dari latar belakang Apache; nginx adalah perampokan pertama saya ke server web jadi saya yakin saya kehilangan sesuatu yang jelas karena latar belakang HTTP saya lemah. Terima kasih sebelumnya atas bantuan yang dapat Anda berikan.

Doug Stephen
sumber

Jawaban:

17

try_files harus menjadi apa yang Anda inginkan.

Sesuatu seperti ini:

try_files $uri.html $uri $uri/ =404;
Shane Madden
sumber
1
Ini berhasil, dengan pengecualian kecil bahwa $ uri.html menyebabkan 500. Saya harus menggunakan "$ {uri} .html".
Doug Stephen
4
Mengubahnya try_files $uri.html $uri/ =404;menjadi SEO SEO yang lebih baik, karena Anda tidak akan memiliki dua url foobar.com/bar dan foobar.com/bar.html menunjuk ke sumber daya yang sama.
Khaja Minhajuddin
5

Per komentar dari @Khaja, jawaban terbaik adalah:

try_files $uri.html $uri/ =404;

Sehingga hanya satu salinan dari sumber daya yang dilayani (tanpa ekstensi .html). Anda tidak ingin membagi kekuatan tautan Anda dengan beberapa URL yang menyajikan konten duplikat. Temukan dokumentasinya di sini .

Bryce
sumber
Saya mencoba ini. try_files $ uri.html $ uri / = 404; itu pecah pemuatan homepage tanpa mencalonkan myurl / index juga memuat bangkrut dari css, js dll
aspiringGuru