Как обрабатывать глубокие ссылки в Angular?
Об этом было много вопросов. Я просматривал их в течение нескольких дней. Я все пробовал, и никто не работал. Да, я также проверил angular.io, и это тоже не сработало. Так что, пожалуйста, может кто-нибудь придумать окончательный ответ или указать мне тот, который я, вероятно, еще не видел?
Вот этот URL, глубокая ссылка на приложение Angular с именем whatever
и его маршрут someroute
с параметром.
http://somedomain.com/whatever/someroute/123456
Конечно, это приводит к ошибке 404. Необходимо настроить веб-сервер. Мой сервер запускает nginx, и я сделал это:
location / {
try_files $uri $uri/ /whatever/index.html;
}
Теперь он перенаправляет ошибку каждого сайта 404 на этом сервере в мое приложение Angular, но это вторичная проблема. Проблема в том, что маршрут по-прежнему не хочет входить. По умолчанию маршрут /
вызывается каждый раз, а не /someroute/123456
.
Вместо того, чтобы указывать на различные учебники, которые я, вероятно, уже видел и пробовал, может кто-нибудь кратко объяснить, что такое тривиальная точка, которую я пропустил?
Ответы
Ответ 1
Вы можете переключиться на HashLocationStrategy, т.е.
RouterModule.forRoot(appRoutes, {useHash: true});
В результате все URL-адреса приложения будут index.html, а затем "#", а затем информация о маршрутизации.
Поскольку вы всегда будете индексировать .html, независимо от маршрута, вы не получите 404 для любого действительного URL.
Ответ 2
Похоже, вы можете пропустить тег <base href="">
. Этот тег сообщает маршрутизатору Angular, что такое базовый URI для вашего приложения. Если этого нет, то Angular предполагает, что начальный URI навигации (в вашем случае /whatever/someroute/123456
) является базовым URI, и вся последующая маршрутизация будет выполняться относительно этого URI.
Попробуйте включить <base href="/whatever/">
в элементе <head>
вашего index.html
, чтобы направить маршрутизатор соответственно.
Вы также можете использовать метатег <base href="">
через ng build
, если вы используете CLI Angular:
ng build --base-href '/whatever/'