ホームページを処理するための新しいロケーションブロックを追加し、( "index index.html;"の代わりに)try_filesディレクティブを使用してindex.htmlファイルを直接検索します。try_filesでは、少なくとも2つの選択肢を入力する必要があることに注意してください。だから私は同じファイルを2回入れました。
location = / {
root /usr/share/nginx/www.mydomain.com/public;
try_files /index.html /index.html;
}
私の実験に基づいて良さそうです:
curl -iL http://www.mydomain.com/index.html
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sat, 16 Mar 2013 09:07:27 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: http://www.mydomain.com/
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 16 Mar 2013 09:07:27 GMT
Content-Type: text/html
Content-Length: 4
Last-Modified: Sat, 16 Mar 2013 08:05:47 GMT
Connection: keep-alive
Accept-Ranges: bytes
[ UPDATE ]リダイレクトループの根本的な原因は「index」ディレクティブです。これにより、nginxはロケーションマッチの別のラウンドを再度実行します。このようにして、ロケーションブロックの外側の書き換えルールが再度実行され、ループが発生します。したがって、「index」ディレクティブは「rewrite...last;」のようなものです。指令。あなたはあなたの場合それを望まない。
秘訣は、別の場所の一致を再度トリガーしないことです。try_filesはそれを効率的に行うことができます。だから私は元の答えでそれを選びました。ただし、必要に応じて、別の簡単な修正方法を置き換えることもできます
index index.html;
に
rewrite ^/$ /index.html break;
元の「場所/」ブロック内。この'書き換え...ブレーク;' ディレクティブはnginxを同じロケーションブロック内にとどめ、ループを効果的に停止します。ただし、このアプローチの副作用は、「index」ディレクティブによって提供される機能が失われることです。
[更新2 ]
実際には、インデックスディレクティブはリライトディレクティブの後に実行されます。したがって、以下も機能します。rewrite...breakを追加したことに注意してください。ライン。リクエストのURIが「/」の場合、nginxは最初に書き換えルールから既存のファイル/index.htmlを検索します。したがって、この要求に対してインデックスディレクティブがトリガーされることはありません。その結果、両方のディレクティブが連携して機能します。
location / {
root /usr/share/nginx/www.mydomain.com/public;
index index.html;
rewrite ^/$ /index.html break;
}