Ответ 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. Там хорошая запись в блоге об этой теме.