2

ユーザーが一連の文字と数字を選択し、それに基づいて新しいページに移動する Web サイトがあります。

そのため、/cds/C_1_3_A_2

ディレクトリに実際のC_1_3_A_2ページはありませんcds。書き換えルールがあります。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^cds/(.*) /cds/index.html [L]

そのため、要求されたファイルが存在しない場合は、 に書き換えられますindex.html。ここで、php スクリプトが URL の最後のコンポーネント ( C_1_3_A_2) を取得し、関連するコンテンツをロードします。URL の最後のコンポーネントが である場合/cds、PHP スクリプトは にリダイレクトします。/cds/C_1_1_A_1

ただし、AJAX を追加してスムーズにしたいと考えています。つまり、古いブラウザーは history.pushState をサポートしていないため、ハッシュ フラグメントのサポートを追加する必要があります。

したがって、ユーザーが自分で に行く場合は、次のようになり/cds/#C_1_3_A_2ます。/cds/C_1_3_A_2

しかし、フラグメントがサーバーに送信されないため、ユーザーは最終 的に になり、意図したものではなく、/cds/C_1_1_A_1#C_1_3_A_2関連するコンテンツを取得します。C_1_1_A_1C_1_3_A_2

PHP はサーバー側であるため、Javascript がフラグメントを処理する前に実行されます。ユーザーが PHP スクリプトによってリダイレクトされてから、JavaScript によって戻されることは望ましくありません。

では、ハッシュ フラグメントのサポートを追加するにはどうすればよいでしょうか。他のサイトはこれにどのように対処していますか?

4

2 に答える 2

0

それをもっとフロントエンドに移動する必要があります。通常、リンクがハッシュフラグメントのみで構成されている場合、新しいリクエストはトリガーされません(ただし、画面の上部にジャンプするなど、必要に応じて処理できる場合があります)。ここでの問題は「/」の追加にあるようです。リンクに含める場合は、ページにすでに「/」が含まれている必要があり、リンクはハッシュのみで構成されている必要があります。

window.hashchangeこれを処理する最良の方法は、新しいブラウザでサポートされているイベントにバインドすることです。古いブラウザで利用できるポリフィルがあります。hashchangeイベントが発生すると、新しいURLのハッシュ位置を取得し、それを使用してバックエンドへのAjaxリクエストを実行できます。

?partial=true理想的には、バックエンドを変更して、何らかの形でパラメータを追加し、ページに追加できるコンテンツのみを返すようにすることができます(周囲のレイアウトの形式はありません)。これが、必要となる唯一のバックエンドの変更であるはずです。それ以外の場合は、JavaScriptを使用して取得したデータからコンテンツを抽出し、それをページに統合することができます(ただし、コンテンツ全体が引き続き転送されるため、作業中は一時的なものにする必要があります)。

于 2012-09-26T22:18:46.733 に答える
0

ハッシュのあるページへのリクエストのヘッダーを見ると、ハッシュ部分は Web サーバーに送信されていません。そのため、php も apache も、ハッシュが存在するかどうかさえ認識されません。「最後のコンポーネント」がない場合は、インデックスページをロードしてリダイレクトせずに、javascript を介してデフォルト値をハッシュに設定するのがおそらく最善です。

于 2012-09-26T22:15:41.827 に答える