Как справиться с обновлением страницы с JS History API pushState
небольшой веб-сайт, который я создавал (больше похож на fiddling), использует AJAX для загрузки каждой страницы. Раньше я менял хэш url, это отлично работало, но было уродливо, и пользователь мог обновить страницу, и она останется на той же странице.
теперь я переключился на использование pushState в API истории JS, который выглядит намного лучше, и назад и вперед, но обновление не делает. Например:
будет: http://example.com/page2
переходит к 404, поскольку нет реальной страницы называемая Страница 2. Но если я нажму на кнопку, которая использует метод pushState для изменения url-адреса, он работает так, как должен.
Как разрешить обновления и постоянные ссылки с новым API истории?
(и как поисковые системы относятся к этому, видя, что Google должен был создать способ индексирования хэш-адресов, заставив разработчика переключиться на #!
, возможно ли, что они сделают что-то подобное для api истории в будущем?)
3 ответов
вы не должны использовать pushState
чтобы вообще нажимать недопустимые URL-адреса. Он предназначен для использования в случаях, когда сайт работает как с AJAX, так и без него - т. е. вы нажимаете URL, который приведет к тому же выходу без AJAX при создании этого выхода с AJAX.
Если вы хотите только виртуальные URL-адреса (как в эпоху до pushState), продолжайте использовать хэш-тег.
это несколько старый вопрос, но это был один из лучших результатов google. В стремлении быть полезным, вот мое решение.
Вы можете использовать Mod_Rewrite Apache для перезаписи url-адреса в центральное расположение. Например: example.com/p2 получает содержимое страницы из example.com/index.php?page=p2 Вы можете сохранить текущую реализацию API истории и AJAX, чтобы получить содержимое и включить следующее в свой .реврайт
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([^/\.]+)/?$ index.php?page=&full=1 [L]
</ifModule>
в вашей индекс.на PHP:
<?php
if(isset($_GET['full']) {
//Generate the full page here
}else{
//Generate just the content for AJAX
}
?>
На Этой Странице хороший учебник по С помощью mod_rewrite перенаправить весь сайт. (Комментарии 11 и 13 также имеют полезные дополнения)
Мне пришлось перенаправить 404 ошибки на домашнюю страницу сайтов (ту, которая загружает запросы AJAX), а затем получить последний компонент URL-адреса и запустить функцию javascript, которая загружает страницу с помощью запроса AJAX. Не отличное решение, но, кажется, работает хорошо.