O ile wiem, w Durandalu 2.0 nie można tego zrobić. Wtyczka router
i history
nie obsługuje tego i nie będzie łatwa, ponieważ w kodzie są pewne miejsca, które polegają na #
.
Jednak nie sądzę, że jest to problem w twoim scenariuszu. Być może musisz zmienić sposób radzenia sobie z wymogiem indeksowania aplikacji.
nadal można dokonać SEO aplikacja kompatybilna z użyciem #
określając rodzaj meta fragment w głównym HTML aplikacji:
<meta name="fragment" content="!">
Więc mówisz google, że linki nie mają #!
ale że aplikacja używa renderowania JavaScript. Następnie żądania od robota będą obejmować: ?_escaped_fragment_
.
Więc w aplikacji można użyć:
mysite.com/#myroute
i robot będzie żądać:
mysite.com?_escaped_fragment_=myroute
Sprawdź Sekcja 3 Google documentation on crawling wiedzieć więcej o meta tagu fragmentów.
PROPOZYCJA
Jeśli chcesz, aby w pełni skorzystać z tej funkcji Moim przy użyciu pushState w Durandal 2,0 aktywując router tak:
router.activate({ pushState: true });
I również w tym meta tagu fragmentów.
<meta name="fragment" content="!">
Co należy wziąć pod uwagę w przypadku korzystania pushState:
Zastosowanie pushState tylko wtedy, gdy nie planuje wspierać starych przeglądarek.
Trzeba dokonać po stronie serwera pushState gotowy, oznacza to, że gdy serwer jest proszony o mysite.com/myroute
powinna być w stanie wrócić tą samą aplikację JS i niech proces klienta parametrów ciąg kwerendy. Na przykład można to osiągnąć za pomocą przepisywania adresu URL IIS, jeśli korzystasz z ASP.NET. Jest dobry blog post na ten temat.
Znakomicie napisana odpowiedź. Dziękuję, to mi bardzo pomoże. – ccorrin
Mam szybkie pytanie, myślę, że mam to działa teraz, ale kiedy przesyłam moją stronę do google, i podaję linki do google, muszę dać to http://mysite.com/#! lub po prostu http://mysite.com i google doda _escaped_fragment_, ponieważ mam go w metatagu? – ccorrin
Powiedziałbym, że mysite.com tylko .. – margabit