загрузка веб-страницы для поддельной строки запроса

Я даже не знаю, как сформулировать название этого вопроса, но, надеюсь, следующее описание объяснит мою проблему.

У меня есть веб-приложение, состоящее из одной пустой страницы поиска с полем поиска. Поиск фактически выполняется клиентским браузером, а результаты загружаются через ajax. Другими словами, сервер ничего не делает, кроме как обслуживает пустую страницу поиска по адресу http://server/index.html.

После выполнения запроса я использую history.pushState(), чтобы изменить URI в адресной строке браузера на что-то более разумное, например http://server/index.html?q=searchterm&page=1&size=10. Разбивка на страницы выполняется ссылками prev и next, которые также вызываются через ajax вместе с соответственно увеличенными или уменьшенными значениями page и size. Все хорошо.

Но я хочу, чтобы мое приложение было хорошим веб-гражданином и могло создавать закладки. Другими словами, если кто-то вводит http://server/index.html?q=searchterm&page=1&size=10 прямо в адресную строку браузера, я хочу правильно загрузить результаты. За исключением того, что если я отправлю этот URI на сервер, подача будет хрипеть, если я не реализую некоторую обработку на стороне сервера. И это то, чего я не хочу делать, поскольку это полностью изменит сложность моего приложения. Если только я не могу сделать это с помощью обычного ванильного nginx (моего веб-сервера). Другими словами, я не хочу реализовывать какие-либо сценарии на стороне сервера, кроме того, что можно сделать с самим веб-сервером, например SSI.

Итак, как мне решить эту проблему?


person punkish    schedule 21.11.2017    source источник


Ответы (2)


привет, точный термин для того, что вы пытаетесь сделать, это «Маршрутизация на стороне клиента». Он включает в себя комбинацию манипулирования историей браузера с использованием history.pushState() [что вы уже делаете] и настройку конфигурации на стороне сервера.

  • .htaccess, если вы используете apache

  • config, если вы используете nginx.

Настройки на стороне сервера сделают ваш веб-сервер базовым index.html для любого запроса, который делает браузер (http://server/index.html?q=searchterm&page=1&size=10) после загрузки в клиенте вы должны получить строку запроса в адресной строке окна и обработать ее соответствующим образом (сделать запрос ajax).

Эта реализация имеет значение, когда поисковые системы сканируют ваш сайт с использованием URL-адреса, но это не входит в рамки этого вопроса.

этот SO вопрос даст вам Начало

person Ananda    schedule 21.11.2017

на самом деле, я думаю, что это намного проще, чем я думал. Когда я отправляю браузер на http://server/index.html?q=searchterm&page=1&size=10, он не жалуется. Он просто отправляет обратно http://server/index.html. Тогда мне просто нужно использовать js для извлечения строки запроса и выполнения моего бита ajax. Это должно работать.

person punkish    schedule 21.11.2017