web-dev-qa-db-ja.com

nginx:すべてのリクエストを単一のhtmlページに送信します

Nginxを使用して、URLを保持したいのですが、実際には何があっても同じページを読み込みます。 History.getState()でurlを使用して、javascriptアプリでリクエストをルーティングします。簡単なことのように思えますか?

location / {
    rewrite (.*) base.html break;
}

動作しますが、URLをリダイレクトしますか?まだURLが必要です。常に同じページを使用したいだけです。

142

これはあなたのためにそれを行うと思います:

location / {
    try_files /base.html =404;
}
178
Alex Howansky

try_filesだけを使用してもうまくいきませんでした-ログにrewriteまたは内部リダイレクトcycleエラーが発生しました。

Nginxのドキュメントには追加の詳細がありました。

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

だから私は次を使用することになりました:

root /var/www/mysite;

location / {
    try_files $uri /base.html;
}

location = /base.html {
    expires 30s;
}
24
Kevan Stannard

元の書き換えはほとんど機能するはずです。なぜリダイレクトされるのか分かりませんが、本当に欲しいのはただ

rewrite ^ /base.html break;

その場所に配置するか、サーバーに直接配置する必要があります。

16
kolbyjack

これは私のために働いた:

location / {
    alias /path/to/my/indexfile/;
    try_files $uri /index.html;
}

これにより、javascriptシングルページアプリのキャッチオールURLを作成できました。 npm run buildと同じディレクトリにある場合、index.htmlによって構築されたcss、フォント、javascriptなどのすべての静的ファイルが見つかります。

静的ファイルが別のディレクトリにある場合、何らかの理由で、次のようなものも必要になります。

# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
    alias /path/to/my/staticfiles/;
}
11
Mark Chackerian

正しい方法は次のとおりです。

location / {
    rewrite (.*) base.html last;
}

lastを使用すると、書き換えの結果に応じて、nginxが新しい適切なlocationブロックを見つけます。

try_filesもこの問題に対する完全に有効なアプローチです。

7
Etherealone

これは私のために働いた:

location / {
    try_files $uri $uri/ /base.html;
}
4
Abhishek