Подтвердить что ты не робот

Angular 2 Удалите хэш (#) из URL-адреса

Я пытаюсь удалить знак # из URL-адреса в Angular 2, но я не нашел никакого хорошего объяснения о том, как его удалить без каких-либо проблем.

Я помню, что на AngularJS 1 было проще добавить $locationProvider.html5Mode(true);

Также я был бы признателен, если вы скажете мне, является ли это хорошей практикой (удаление #) или может повлиять на SEO для приложения (или улучшить его).

PS: Я использую Angular 2 с typescript

4b9b3361

Ответ 1

Как отметил PathLocationStrategy, PathLocationStrategy является стратегией расположения по умолчанию в Angular2, и, если в URL присутствует символ #, он должен быть где-то переопределен.

Помимо поставщиков модулей проверьте импорт модуля, его также можно переопределить, { useHash: true } в качестве второго аргумента RouterModule.forRoot:

imports: [
    ...
    RouterModule.forRoot(routes, { useHash: true })  // remove second argument
]

Также обратите внимание, что при использовании PathLocationStrategy вам необходимо настроить веб-сервер так, чтобы он обслуживал index.html (точку входа в приложение) для всех запрошенных расположений.

Ответ 2

В angular есть стратегия размещения

Посмотрите на app.module.ts, где приложение загружается там, где есть

@NgModule({
.......
  providers: [
....
    { provide: LocationStrategy, useClass: HashLocationStrategy },
....
]
});

И удалите эту часть, так как PathLocationStrategy стратегия по умолчанию

Ответ 3

Приведенные выше ответы содержат правильное объяснение об удалении хэша из URL, но при изменении LocationStrategy ваш бэкэнд будет затронут, потому что бэкэнд не понимает все ваши маршруты Angular 2. Вот шаги, чтобы удалить хэш с поддержкой бэкэнда.

1) Измените Angular, чтобы использовать PathLocationStrategy

@NgModule({
  .....
  providers: [
    // Below line is optional as default LocationStrategy is PathLocationStrategy
    {provide: LocationStrategy, useClass: PathLocationStrategy} 
  ]
})

2) Измените базовый Href в index.html, Angular2 будет обрабатывать все маршруты после базового Href.

<base href="/app-context/">

Например

<base href="/app/">

3) На бэкэнд-сервере мы должны обработать файл index.html для любого запроса с шаблоном ниже

"/app/**" - Render index.html for any request coming with "/app/**" pattern

index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>My App</title>
    <base href="/app/">
  </head>
  <body>
    <app-root>Loading...</app-root>
    <script type="text/javascript" src="vendor.bundle.js"></script>
    <script type="text/javascript" src="main.bundle.js"></script>
  </body>
</html>

Ответ 4

Можно ли удалить хеш на определенной странице? (Мне не нужен хеш только для одного маршрута), если я использую {useHash: false}, он применяется ко всем маршрутам, а затем удаляет # из каждого URL в моем приложении.