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