2017-11-21 14 views
0

私はこの質問のタイトルをどのようにフレーズするか分からないが、うまくいけば以下の説明が私の問題を説明するだろう。偽のクエリ文字列のWebページを読み込む

私は、検索フィールドを持つ単一の裸の検索ページで構成されたWebアプリケーションを持っています。検索は実際にはクライアントブラウザによって行われ、結果はajaxを介してロードされます。つまり、サーバーは何もしませんが、クエリが実行されたら、私はhttp://server/index.html?q=searchterm&page=1&size=10ような、より賢明なものに、ブラウザのアドレスバーにURIを変更するhistory.pushState()を使用http://server/index.html

で裸の検索ページを果たします。ページネーションは、pagesizeの値を適切にインクリメントまたはデクリメントしたあと、ajax経由で呼び出されるprevおよびnextリンクによって実行されます。すべてが良いです。

しかし、私は自分のアプリケーションが良いWeb市民であり、ブックマークできるようにしたいと思います。言い換えれば、ブラウザのアドレスバーに直接http://server/index.html?q=searchterm&page=1&size=10と入力した場合、結果を正しく読み込む必要があります。ただし、サーバー側の処理を実装しない限り、そのURIをサーバーに送信すると、サーバーが不正になります。そして、それは私のアプリケーションの複雑さを完全に変えるので、私がしたくないことです。 私がプレーンなのは、バニラnginx(私のWebサーバー)で行うことができない限り。言い換えれば、SSIのようなWebサーバー自体でできること以外のサーバーサイドスクリプトを実装したくないということです。

この問題を解決するにはどうすればよいですか?

答えて

0

あなたがしようとしていることの正確な言葉は、「クライアント側ルーティング」です。それはあなた場合は、Apacheに

  • 設定ファイルを使用している場合

    • .htaccessの設定[あなたがすでにやっている] history.pushState()とサーバ側の設定を使用してブラウザの履歴を操作の組み合わせを含み、 nginxを使用しています。

    サーバー側の設定は一度使用すると、ウィンドウのアドレスバーにクエリ文字列を取得し、それに応じて処理する必要がクライアントにロードされた(http://server/index.html?q=searchterm&page=1&size=10)Webサーバーブラウザが作るものは何でも要求のためのあなたのベースのindex.htmlを行います(ajaxリクエストを作成する)。

    この実装は、検索エンジンがURLを使用してサイトをクロールしても、この質問の対象外です。

    このSO questionは実際に、私はこれが思ったよりもずっと簡単だと思うあなたに開始

  • 0

    を与えるだろう。ブラウザをhttp://server/index.html?q=searchterm&page=1&size=10に送信しても、それは文句なしです。単にhttp://server/index.htmlを返信します。それでは、私はjsを使ってクエリ文字列を抽出し、私のajaxビットを実行するだけです。これはうまくいくはずです。

    関連する問題