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

У меня есть http://mysite.com/index.php .

И подменю

  • home => http://mysite.com/index.php
  • о нас => http://mysite.com/about.us.php
  • продукты => http://mysite.com/products.php

Но я хочу http://mysite.com/index.php обрабатывать каждый запрос и просто изменять контент с помощью запроса Ajax. Таким образом, сайт загружает только часть контента и намного быстрее и удобнее в навигации.

Проблема здесь в SEO, потому что единственный URL-адрес google будет выглядеть http://mysite.com/index.php, и я хотел бы связать http://mysite.com/about-us с контентом About Us , http: //mysite.com/product к содержимому продуктов и т. д.

Я знаю, что могу сделать это, когда PHP просто читает URL-адрес и записывает Ajax на лету, но при этом вся страница будет перезагружаться каждый раз. Есть ли способ сделать это без перезагрузки всей страницы? Мне кажется, что мне нужно иметь регулярный якорь в подменю, например, указывая на « http://mysite.com/contact-us », но при нажатии вместо того, чтобы открывать эту страницу, обрабатывайте запрос Ajax.

И если это возможно, Google увидит это как черную шляпу, верно?

С уважением Алекс

вы не можете изменить URL-адрес в адресной строке, не изменяя страницу, потому что, чтобы иметь возможность сделать это, я мог бы навестить меня по адресу http://www.imhackingyou.com/sucker, но изменить адресную строку для чтения http: // www .bankofamerica.com / Войти

Это проблема маршрутизации, а не проблема AJAX.

Если вы использовали другой инструмент ( cough ASP.NET MVC cough ), вы просто добавили бы маршрут (и я надеюсь, что есть способ сделать это на PHP), который принял URLS, например

/home /products ... 

и направил их, скажем,

 /index.php?area=home /index.php?area=products 

Обычно это выполняется с помощью механизма перезаписи при использовании за пределами хорошей системы URL MVC или RESTful. Я использую ISAPI Rewrite для IIS, но если вы работаете над стеком LAMP, я думаю, что Apache предоставляет модуль, который предоставляет те же возможности. (Google .htaccess )

ПРЕДУПРЕЖДЕНИЕ: RANT FOLLOWS

И, для чего это стоит,

  1. Не пытайтесь писать все приложение в JavaScript. Сервер там по какой-то причине. Часть вашей работы в качестве веб-разработчика заключается в том, чтобы как можно больше поглощать всю работу на вашем сервере. Производительность браузера и проблемы с совместимостью заставят вас сходить с ума, когда вы попытаетесь сделать все на клиенте.

  2. Избегать обратной передачи имеет смысл во многих обстоятельствах, но это не серебряная пуля, которую вы должны попробовать применить к каждой странице. Обычно имеет смысл загружать новую страницу при нажатии ссылки. Это то, что пользователь ожидает, он более стабилен (поскольку большая часть требуемой инфраструктуры является серверной), и это не медленнее, чем запрос AJAX для получения того же самого.

Правила:

  1. НИКОГДА не сломайте кнопку «Назад». Без тщательного планирования большинство приложений AJAX нарушают это правило.
  2. См. Правило №1.

Похоже, что это должно быть выполнено с помощью механизма перезаписи , но, предполагая, что у вас есть веская причина использовать AJAX, вы можете изменить URL-адреса с помощью javascript, изменив часть после хэша или, еще лучше, hashbang:

 window.location.hash = "#!about-us"; 

Для получения дополнительной информации о hashbang с точки зрения SEO, посетите http://www.seomoz.org/blog/how-to-allow-google-to-crawl-ajax-content

ЗДЕСЬ РЕШЕНИЕ:

 window.history.pushState(data, title, url) 

Здесь Роб объясняет, как это работает, и у вас есть рабочий пример:

http://moz.com/blog/create-crawlable-link-friendly-ajax-websites-using-pushstate

Как Shopify делает это тогда? Перейдите на их веб-сайт, нажмите ссылку «Возможности», и вы увидите, что URL-адрес говорит:

http://www.shopify.com/tour/sell-online

Затем нажмите на любую из подзаголовков, и вы увидите, что адрес в URl изменяется без использования хэша, но нет флип страницы.

Я не думаю, что они используют ajax для изменения контента, потому что все это, кажется, включено в скрытые div на странице, но независимо от того, вы, вероятно, можете изменить URL-адрес, используя трюки на стороне клиента.