注: この質問は次のようにも読めます。
Java でハッシュバンのないクライアント側 MVC フレームワークのブックマークをサポートする方法。
hashtags
を使用するAngularアプリをhtml5mode
. 無事設定できました
$locationProvider.html5Mode(true);
また、ランディング ページ (index.html) からのすべてのリンクは正常に機能します。
問題は、部分的な URL が直接参照されている場合、サーバー エンドポイントの定義がクライアント側で定義されたルートに結合されていないため、当然 404 が返されることです。
したがって、HTML5 がないと、SEO に適していないハッシュバングを取得できますが、HTML5 を使用すると、ランディング ページ (Angular をブートストラップするページ) 以外をブックマークすることはできません。
デフォルトのランディング ページ (index.html) を最初にリクエストすると機能する理由、つまり htpp://mydomain.com/ :
- ブラウザはサーバーから index.html をリクエストします
- サーバーは index.html を返し、ブラウザーは角度フレームワークをロードします
- URL の変更がクライアント側のルーターに送信され、適切なパーシャルが読み込まれます。
(つまり) http://mydomain.com/fooがブラウザーから直接要求された場合に機能しない理由:
- ブラウザがサーバーに mydomain/foo を要求します。
- リソースが存在しません
- サーバーが 404 を返す
この話には何かが欠けている、私には何がわからない。これが私が見ることができる唯一の2つの答えです...
- それは設計によるものです。 これはどのように機能するはずですか?ユーザーは常にクライアント MVC フレームワークのブートストラップ ページ (通常は index.html) にアクセスし、そこから移動する必要があります。状態を保存できず、ブックマークする方法がないため、これは理想的ではありません...クロールは言うまでもありません。
- サーバー ソリューション。 これはサーバー側のトリックで回避できますか? たとえば、すべてのリクエストで index.html を返し、すぐに追加のコンテキストで router を呼び出します。もしそうなら、これは AngularJS が完全にクライアント側であり、ハックのように見えるという目的に反しています。