Маршрутизатор Durandal 2.0 можно заменить # на #! для ajax веб-сканирования цели?

Можно ли заменить поведение маршрутизатора по умолчанию в Durandal 2.0, чтобы заменить маршрут по умолчанию, например: "mysite.com/#/myroute" с "mysite.com/#!/myroute", причина в том, что в порядке для google-паука для обнаружения страницы является способностью ajax crawl-able, мне нужно вставить hashbang в url, а не только хэштег. Любая помощь будет принята с благодарностью.

Спасибо!

Ответ 1

Насколько я знаю, в Durandal 2.0 вы не можете этого сделать. Плагин router и history не поддерживает это, и это было бы непросто, поскольку в коде есть некоторые места, которые полагаются на #.

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

Вы все равно можете сделать свое приложение совместимым с SEO с помощью #, указав тип метафактора в главном HTML-приложении:

<meta name="fragment" content="!">

Итак, вы сообщаете Google, что ваши ссылки не имеют #!, но что приложение использует рендеринг JavaScript. Тогда запросы от искателя будут включать ?_escaped_fragment_.

Итак, в вашем приложении вы будете использовать:

mysite.com/#myroute

и искатель запросит:

mysite.com?_escaped_fragment_=myroute

Ознакомьтесь с разделом 3 документации Google об обходе, чтобы узнать больше о теге мета-фрагмента.

SUGGESTION

Если вы хотите полностью воспользоваться этой функцией, я предлагаю использовать pushState в Durandal 2.0, активируя маршрутизатор следующим образом:

router.activate({ pushState: true } );

И также включая тег мета-фрагмента.

 <meta name="fragment" content="!">

Вещи, которые следует учитывать при использовании pushState:

  • Используйте pushState только в том случае, если вы не планируете поддерживать старые браузеры.

  • Вам нужно сделать pushState на стороне сервера, это означает, что когда запрос на сервер с mysite.com/myroute должен иметь возможность вернуть одно и то же приложение JS и позволить клиенту обрабатывать параметры строки запроса. Например, это может быть достигнуто с использованием перезаписи URL-адреса IIS, если вы используете ASP.NET. Там хорошая запись в блоге об этой теме.