AngularJSアプリで適切な404を提供する最良の方法は何ですか?
少しの背景:Angularアプリを作成していて、使用することを選択しました
$locationProvider.html5Mode(true);
uRLを自然に(そして、複数ページの "従来の" Webアプリと見分けがつかないように)見せたいからです。
サーバー側(単純なPython Flaskアプリ)には、すべてをangularアプリにリダイレクトするキャッチオールハンドラーがあります。
@app.route('/', defaults={'path': ''})
@app.route('/<path>')
def index(path):
return make_response(open('Ang/templates/index.html').read())
今、私は404エラーをどうするかを考えています。私が見たほとんどのAngularアプリは次のことを行います:
.otherwise({ redirectTo: '/' })
つまり、適切な404を提供する方法はありません。
ただし、404ステータスコード(主にSEOの目的)で、適切な404を返したいと思います。
Angularで404を処理する最良の方法は何ですか?心配する必要はありません。または、キャッチオールを削除して、サーバー側で適切な404を提供する必要がありますか?
わかりやすくするために編集
少し遊んだり、Miguelと議論した後、いくつかの異なるソリューションをまとめました。
/app
など)用に予約します。このセクションでは、キャッチオールを設定し、適切な404を心配しません。ページは通常のページとして提供され、/app
で始まらない無効なURLにアクセスすると、適切な404になります。追伸2番目のオプションは私の個人的なお気に入りです。私はこれを試してみましたが、非常にうまく機能します。
FlaskルートとAngularルートを混同していると思います。
404エラーコードはHTTPプロトコルの一部です。 Webサーバーは、要求されたURLがサーバーによって認識されていない場合、クライアントへの応答として使用します。 Flaskサーバーにキャッチオールを配置するため、404を取得することはありません。Flaskは、アドレスバーに入力したURLのビュー関数を呼び出します。私の意見では、キャッチオールをすべきではなく、ユーザーがアドレスバーに無効なURLを入力したときにFlaskに404で応答させるだけで、何も問題はありません。 Flaskでは、404コードが返されたときにカスタムページを送信することもできるため、エラーページを他のサイトのように見せることができます。
Angular側では、アプリケーション内部のすべてのルーティングがサーバーでさえ知らなくてもクライアントで行われるため、実際にはHTTPトランザクションはありません。これは混乱の一部である可能性があります。Angularリンクは、html5モードでもサーバーへの要求なしにクライアントで完全に処理されるため、このコンテキストには404エラーという概念はありません。サーバーの関与なし。不明なルートに移動するAngularリンクは、otherwise
句に該当します。ここで適切なことは、エラーメッセージを表示するか(ユーザーがこの状態について知る必要があり、それについて何かできる場合)、またはredirectTo: '/'
が行うように、未知のルートを無視することです。
これはあなたのケースではないようですが、Angularアプリケーションの提供に加えて、サーバーがAngularの実行中に使用できるAPIを実装している場合、Angularは、無効なURLを使用してこのAPIに非同期リクエストを行った場合、Flaskから404を取得できます。しかし、リクエストがアプリケーションの内部にあり、ユーザーによって直接トリガーされないため、404エラーページが表示されたくない場合は、ユーザーに表示したくないでしょう。
これが状況の明確化に役立つことを願っています!
これは古いスレッドですが、答えを探している間、私はそれを見て行きます。
これをappRoutes.jsの最後に追加して、404.htmlビューを作成します。
.when('/404', {
templateUrl: 'views/404.html',
controller: 'MainController'
})
.otherwise({ redirectTo: '/404' })
サイトの実際のページに使用可能なJavaScript以外のコンテンツを提供していない場合、実際のHTTP 404は「SEOの目的には」かなり役に立たないと思います。検索インデクサーは、インデックス作成のためにangularサイトをレンダリングできません。
SEOが心配な場合は、angularページがレンダリングしているコンテンツをレンダリングするサーバー側の方法が必要になります。その場合、無効なURLに404を追加するのが最も簡単な部分です問題の。