4

今日、HTML5 History APIに関する別の投稿を見て、Mozillaのチュートリアルを読んだ後、このAPIを使用して、ページをリロードしたりハッシュを使用したりせずにURLを「書き換え」ることができる基本的な動作デモを実装できました。

私の質問は次のとおりです。ページにアクセスし、HistoryAPIを使用して新しいURLを書き込むこれらのリンクの1つをクリックしたユーザーがいるとします。次に、ユーザーはページをブックマークします。これで、書き換えられたURLがブックマークされると思います。したがって、ユーザーが数日かそこらで戻ってきて、ブックマークされたページに移動しようとすると、404が返されませんか?では、どうすればそれを解決する方法を実装できますか?

これは、私が書き直したURLが存在しない場所を指していることを前提としています。

4

3 に答える 3

2

これが古いことは知っていますが、pushstate を完全に誤用しています。アーティストを表示するページがあるとします。artists.php と呼びましょう。また、いずれかをクリックすると、アーティストの略歴が表示されます。「別の」ページ、artist.php?artist=journey があります。

ここで、バイオを非同期的にモーダル ウィンドウに読み込むことにしたとします。そのため、ajax トリガーを追加してレイアウトを無効にし、コンテンツのみを取得します (artists.php?artist=journey&ajax=true)。artist.php?artist=journey を履歴に「プッシュ」して、そのページが読み込まれると、モーダル ウィンドウにジャーニーがプリロードされたアーティスト ページが読み込まれるようにすることができます。

そうすれば、どこかをクリックしたときにきれいな URL を持つだけでなく、ページのさまざまな状態をブックマークできるようになります。

于 2012-09-14T18:42:56.530 に答える
1

私は今日この問題に遭遇し、ブログにそれに関するエントリを書きました。ユーザーがディープリンクをコピーまたはブックマークして再度アクセスした場合にHTML5プッシュステートを使用すると、サーバーが直接ヒットし、404になります。

これはページの前に要求される直接サーバー呼び出しであり、JSが読み込まれるため、jsプッシュステートライブラリでさえここでは役に立ちません。

最も簡単な解決策は、NginxまたはApacheサーバーに書き換えルールを追加して、同じindex.htmlページへのすべての呼び出しを内部的に書き換えることです。ブラウザは、実際には同じページである場合に、一意のページが提供されていると見なします。

Apache(vhostを使用している場合はvhost内):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.html [L]
 </IfModule>

Nginx

rewrite ^(.+)$ /index.html last;

もちろん、正しいコンテンツを表示するためにJSロジックを追加することもできます。私の場合、これを簡単に処理できるバックボーンルートを使用しています。

于 2012-05-18T06:10:28.450 に答える
0

これは、サーバー側のスクリプトで行う必要があります。サーバーは URL を解析してページを作成する必要があります。

于 2011-03-31T18:37:50.213 に答える