Примечание. Этот вопрос также может быть прочитан:
Как поддерживать закладок безвредных клиентских сторон mvc-фреймворков в Java.
Я перехожу к приложению angular, использующему hashtags
к html5mode
. Я успешно установил
$locationProvider.html5Mode(true);
И все ссылки с целевой страницы (index.html) работают нормально.
Проблема в том, что если частичные URL-адреса ссылаются напрямую, я получаю 404, естественно, поскольку определения конечных точек сервера не связаны с определенными на стороне клиента маршрутами.
Таким образом, без HTML5 мы получаем не-SEO дружественные hashbangs, но с ним мы не можем добавлять закладки ничего, кроме целевой страницы (страница, которая загружается angular).
Почему это работает, если сначала запрашивать целевую страницу по умолчанию (index.html), то есть htpp://mydomain.com/:
- Браузер запрашивает index.html с сервера
- Сервер возвращает index.html, а браузер загружает angular framework
- Изменения URL-адреса отправляются на клиентский маршрутизатор и загружаются соответствующие частичные /s.
Почему это не работает, если (т.е.) http://mydomain.com/foo запрашивается непосредственно из браузера:
- Браузер запрашивает mydomain/foo с сервера.
- Ресурс не существует
- Сервер возвращает 404
Что-то не хватает в этой истории, я просто не знаю, что. Вот только два ответа, которые я вижу...
- Это по дизайну. Как это работает? Пользователи должны всегда приземляться на странице начальной загрузки платформы MVC (обычно index.html), а затем перемещаться оттуда. Это не идеально, потому что состояние не может быть сохранено, и нет возможности закладки... не говоря уже об обходе.
- Серверное решение.. Работает ли это с помощью уловки на стороне сервера? Например, по всем запросам верните index.html и сразу вызовите маршрутизатор с дополнительным контекстом. Если это так, это противоречит объекту, что AngularJS полностью на стороне клиента и кажется взломанным.