Nginxを使用して、URLを保持したいのですが、実際には何があっても同じページを読み込みます。 History.getState()
でurlを使用して、javascriptアプリでリクエストをルーティングします。簡単なことのように思えますか?
location / {
rewrite (.*) base.html break;
}
動作しますが、URLをリダイレクトしますか?まだURLが必要です。常に同じページを使用したいだけです。
これはあなたのためにそれを行うと思います:
location / {
try_files /base.html =404;
}
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;
}
元の書き換えはほとんど機能するはずです。なぜリダイレクトされるのか分かりませんが、本当に欲しいのはただ
rewrite ^ /base.html break;
その場所に配置するか、サーバーに直接配置する必要があります。
これは私のために働いた:
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/;
}
正しい方法は次のとおりです。
location / {
rewrite (.*) base.html last;
}
last
を使用すると、書き換えの結果に応じて、nginxが新しい適切なlocation
ブロックを見つけます。
try_files
もこの問題に対する完全に有効なアプローチです。
これは私のために働いた:
location / {
try_files $uri $uri/ /base.html;
}