私の設定コード:
index index.html index.php;
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/ =404;
}
url が の場合/a/
、 に 301 して/a
、 のtry_files
部分を末尾/
に追加して にします。/a
/a/
index
次のステップでは、定義を試して、 になり/a/index.html
、ファイルに到達すると思います。
しかし、実際には、 を試みて/a/
から飛び出しlocation
、再び に入りlocation
、 になりますif ($uri = '/a/') { ... }
。
そして無限ループ。
ああ、混乱しちゃっただけ。
私がやりたいのは
- 要求された場合は
example.com/a/
にジャンプしexample.com/a
、次に 2 に進みます。 - リクエスト の場合は
example.com/a
表示しますexample.com/a/index.html
(ただし URL は ですexample.com/a
)。
これを達成するのに誰か助けてくれませんか?
答え1
まさに意図したとおりの動作をしています。
/a/index.html
これが起こる前ににリダイレクトし続けるため、 に到達することはできません/a
。nginx がこれを処理すると、ファイルシステム上のディレクトリが認識され、 に (正しく) 自動的にリダイレクトされます/a/
。
この不適切なリダイレクトを削除する必要があります。
答え2
ServerFault へようこそ。次のコードを使用して、OP に記載されている操作を実行できます...
location / {
if ($uri = '/a/') {
return 301 https://example.com/a;
}
try_files $uri $uri/index.html =404;
}
関連する質問と承認された回答については、nginx で URL から末尾のスラッシュを削除する。
基本的には、頼る必要はなくindex
、要求されたindex.html
ときに直接サービスを提供しますexample.com/a
。