nginxの書き換えを使用した「非表示」の.htmlファイル拡張子


16

私はnginx経由で静的サイトを提供していますが、私の目標は次のようなURLを置き換えることです:

http://foo.com/bar.html

http://foo.com/bar

キーは末尾のスラッシュがないことです。私は現在、場所のエイリアスを使用して同様のことをしていますが、これはすべてのファイルの場所ブロックを必要とし、nginxがエイリアスをディレクトリとして見るために末尾のスラッシュも追加するため、退屈です:

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

等々。書き換えに関するドキュメントを読みましたが、言われていることを私がそれをするために必要なものに統合することはできないようです。私はApacheのバックグラウンドから来たわけではありません。nginxはWebサーバーへの最初の進出であるため、HTTPのバックグラウンドが弱いため、明らかな何かを見逃していると確信しています。あなたが提供できる助けを事前に感謝します。

回答:


17

try_files あなたが望むものでなければなりません。

このようなもの:

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

1
これは機能しましたが、$ uri.htmlが500を引き起こしたという小さな例外はありました。「$ {uri} .html」を使用する必要がありました。
ダグスティーブン

4
同じリソースを指すfoob​​ar.com/barfoob​​ar.com/bar.htmlのtry_files $uri.html $uri/ =404; 2つのURLがないため、これを変更する方がSEOの方が賢明です。
カジャミンハジュディン

5

@Khajaからのコメントによると、最良の答えは次のとおりです。

try_files $uri.html $uri/ =404;

そのため、リソースのコピーは1つだけ提供されます(.html拡張子なし)。リンクの強度を、重複したコンテンツを提供する複数のURLに分割することは望ましくありません。ここでドキュメントを検索します。


これを試してみました。try_files $ uri.html $ uri / = 404; myurl / indexを指定せずにホームページの読み込みを中断し、.css、.jsなどの読み込みも中断しました
aspiringGuru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.