私は現在angularjsを使用してWebアプリケーションを作成していますが、この質問はクライアントサイド(as angular does)でルーティングするクライアントサイドのJavaScriptフレームワークに適用されると思います。シングルページアプリケーションで、間違ったURL(404エラー)を処理する正しい方法は何ですか?
シングルページアプリでは、間違ったURLを処理する正しい方法は何ですか?
いくつかの主要なサイトを見ると、https://mail.google.com/mail/以下の任意のURLを入力すると、Gmailが受信トレイにリダイレクトされることがわかります。これは、#文字の前後に間違ったパスがあるかどうかによって、サーバー側(HTTP 300コード付き)またはクライアント側で発生します。一方、twitterは無効なURLに対して実際のHTTP 404を表示します。第3の選択肢は、純粋にクライアント側のエラーページである「ソフト」404を表示することです。
これらのソリューションは、さまざまな状況に適しているようです。 Twitterはユーザーやツイートへのリンクを実際のリンクにしたいので、共有したり、ニュース記事などに投稿したりすることができます。私のウェブサイト、単純なクロールは私にそれを教えてくれる)。一方、Gmailでは、あなたはあなたの受信トレイへのリンクを共有することは期待されていませんし、リンクが本当に永続的/永続的であるかどうかもわかりません。シングルページアプリ。ソフトエラーを与える第3のアプローチは、gmailに似た状況に適しているかもしれませんが、合理的な "デフォルト"のページがないところです。
- は、それが今まで許容できる代わりに404エラーの「ソフト」エラーページを与えることである、または単一ページのアプリケーションは、常ににリダイレクトする必要があります。
この長い導入後、ここにいくつかの具体的な質問があります本当の404 URLが無効な場合は?
- Gmailのコードはまったく問題ないかもしれませんが、無効なリンクが原因で受信トレイにリダイレクトされるバグがあった場合、エラーページよりもユーザーにとって混乱する可能性があります。そこにあるほとんどのWebアプリケーションでは、Gmailと同様にテストされていませんが、エラーページを表示する方が良いでしょうか?
- シングルページアプリケーション用のリアル404を実装するには、サーバー側でルーティングロジックを複製する必要があるようです。これを回避する方法はありますか?
- 404にリダイレクトすると、ユーザーはURLバーにエラーの原因となったURLを表示できるはずです。 html5ヒストリAPIを使用すると、これは前述のサーバー側のルーティングと組み合わせて、間違ったURLを持つ現在のページのリロードをトリガーするだけで実現できます。これをサポートしていないブラウザや、hashbangの表記を使用する場合、これは可能ではないようです。すべてのブラウザをサポートする最善の方法は何ですか?
あなたのウェブサイトはjavascriptなしでも動作しますか? history.pushStateを使用してURL内のjavascriptまたはセグメントを介してURLを更新していますか? –
また、なぜあなたは*を404にリダイレクトすることについて話していますか? –
@markus私が現在取り組んでいるサイトはjavascriptなしでは動作しません。しかし、私はディープリンクが機能するようにしたいので、ユーザーはサイト内へのリンクを共有することができます(通常、これは電子メールによるものです)。私は今のところhashbangの表記法を使用していますが、anglejsはhtml5 pushStateに簡単に切り替えることができます。 – jssebastian