Я так и сделал.Это проще, как можно предположить из длины этого ответа.
1) Перемещение приложений по разным путям
Я переместил все свои приложения (сейчас их два) в подпункт.каталоги.Это означает, что все мои приложения должны работать с base-href, как в
www.example.com/admin-tool/index.html
www.example.com/web/index.html
. Это команда ng
, которую я использую для создания приложения admin-tool
:
#!/usr/bin/env bash
BASE_HREF=admin-tool
ng build --aot --prod --base-href /$BASE_HREF/ --output-hashing none --output-path dist/$BASE_HREF --deploy-url /$BASE_HREF/
2) Перемещение приложений в проект Spring
Перемещение / копирование содержимого в dist/
(вывод ng build
) в (в моем случае) src/main/resources/static
, если вы 'не собираем его там уже:
src/main/resources/static/admin-tool
src/main/resources/static/web
3) Выполните необходимую переадресацию
Как уже упоминалось в других ответах, теперь нужно перенаправить запросы в соответствующие файлы index.html
"«(давайте просто назовем это так).
Вот почему (насколько я понимаю): До того, как мы сделали все это, Angular просто работал на пути #
, что приводило к тому, что код JS обновлялся в зависимости от того, что после #
.И если я правильно понял - удаление #
будет по существу означать, что браузер теперь делает GET-запросы для всех этих URL-адресов.Таким образом, из примера cars
, если у меня есть место / маршрут http://www.example.com/web/cars/berlin, то теперь это будет запрос GET, который должен обработать сервер - в этом случае перенаправьте его на правильную конечную точку.
Ниже приведен код, который я использую в своем бэкэнде для достижения этой цели:
@Controller
public class ForwardController {
@RequestMapping(value = "/*")
public String rectRoot(HttpServletRequest request) {
return "forward:/web/index.html";
}
@RequestMapping(value = "/**/{[path:[^\\.]*}")
public String redirect(HttpServletRequest request) {
if (request.getRequestURI().startsWith("/admin-tool")) {
return "forward:/admin-tool/index.html";
} else if (request.getRequestURI().startsWith("/web")) {
return "forward:/web/index.html";
}
return "forward:/web/index.html";
}
}
Я пока не даю 100%, и я действительно надеюсь, что это просто обходной путь, нодо сих пор у меня нет никаких проблем с ним.
Теперь вот почему я все это делаю:
Очевидно, что рекомендуется отойти от путей #
-ed по нескольким причинам.Поскольку я использую Angular, мне придется пройти еще несколько миль, чтобы начать поисковую оптимизацию (SEO), но из того, что я получаю ([1], [2], [3]), вы должны избегать этого, так какGoogle не индексирует это.Они могут использовать его только как якорь, но если у вас есть контент AJAX за вашим #
, то у вас будет плохое время.
См. [4] о #!
, который также кажется устаревшими взгляните на [5] и [6].
[1] https://www.oho.com/blog/explained-60-seconds-hash-symbols-urls-and-seo
[2] https://www.seroundtable.com/google-no-hashtags-in-urls-26537.html
[3] https://www.seroundtable.com/google-no-url-fragments-23449.html
[4] https://webmasters.stackexchange.com/a/18606/64452
[5] https://webmasters.googleblog.com/2015/10/deprecating-our-ajax-crawling-scheme.html
[6] https://snipcart.com/blog/angular-seo-universal-server-side-rendering