ホームページを扱う新しい場所ブロックを追加し、index.htmlファイルを直接探すために( "index index.html;"ではなく)try_filesディレクティブを使用してください。 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] リダイレクトループの根本的な原因は、場所の別のラウンドを行うためにnginxのトリガー「インデックス」ディレクティブであり、再び一致します。これで、ロケーションブロックの外側の書き換えルールが再度実行され、ループが発生します。したがって、 'index'ディレクティブは "書き直し...最後のような"指令。あなたはあなたの場合にそれを望んでいません。
トリックはもう一度別の場所の一致をトリガーしないことです。 try_filesはそれを効率的に行うことができます。だから私は元の答えでそれを選んだのです。あなたが好きな場合は、別の簡単な修正は、元の "場所/" ブロック内
rewrite ^/$ /index.html break;
によって
index index.html;
を交換することです。これは '書き換え...休憩'ディレクティブはnginxを同じ場所ブロック内にとどめ、効果的にループを止めます。しかし、このアプローチの副作用は、 'index'ディレクティブによって提供される機能を失うことです。
[UPDATE 2]
は実際には、インデックスディレクティブは書換指令の後に実行されます。それで、以下も働きます。私はちょうど書き直し...ブレークを追加したことに注意してください。ライン。リクエストuriが "/"の場合、nginxは既存のファイル/index.htmlを最初に書き換えルールから探します。そのため、この要求に対してインデックス・ディレクティブがトリガーされることはありません。結果として、両方のディレクティブが同時に動作することができます。
location/{
root /usr/share/nginx/www.mydomain.com/public;
index index.html;
rewrite ^/$ /index.html break;
}
ありがとう、それは動作します。なぜ私はリダイレクトループを止めるのか分かりませんが、それはありません。 'try_files'はちょっと魔法です。 'try_files /index.html/index.html;'行を_existing_位置ブロックに置くのがなぜ機能しないのか説明できますか? (私はそれを試みた)。乾杯。 – Ade
@ chuan-maがあなたの問題を解決したので、受け入れられたとして答えを記入することを忘れないでください:) –
@Ade私は今夜後で説明します。 –