Перезапись URL Angular 4 на сервере Tomcat 8 - PullRequest
0 голосов
/ 26 июня 2018

Я развернул приложение angular 4 (с угловой маршрутизацией) на сервере Tomcat с помощью "frontend-maven-plugin" (V1.6), но соответствие URL очень странное.

Фактически, , когда я нажимаю кнопку обновления на всех страницах, возникает ошибка HTTP 404 . Когда я пытаюсь acess на корневой странице, перенаправление на index.html .

отсутствует.

Эти ошибки присутствуют только при развертывании tomcat (работает нормально с nodejs).

Как я могу настроить Tomcat, чтобы исправить эту проблему?

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 14 ноября 2018

Я думаю, что вы получаете 404, потому что вы запрашиваете http://localhost/route, которого нет на сервере tomcat. Так как Angular 2 использует маршрутизацию html 5 по умолчанию, а не хэши в конце URL, обновление страницы выглядит как запрос другого ресурса.

При использовании угловой маршрутизации на tomcat вам необходимо убедиться, что ваш сервер будет сопоставлять все маршруты в вашем приложении с вашим основным index.html при обновлении страницы. Есть несколько способов решить эту проблему. Куда бы ты ни подходил, ты можешь пойти на это.

1) Поместите ниже код в web.xml вашей папки развертывания:

<error-page>
     <error-code>404</error-code>
     <location>/index.html</location>
</error-page>

2) Вы также можете попробовать использовать HashLocationStrategy с # в URL для маршрутов

Попробуйте использовать:

RouterModule.forRoot (маршруты, {useHash: true})

Вместо:

* * RouterModule.forRoot тысячи двадцать-одина (маршруты) * * 1 022

С HashLocationStrategy ваши URL будут выглядеть так:

http://localhost/#/route

3) Tomcat URL Rewrite Valve: переписать URL-адреса, используя конфигурацию уровня сервера для перенаправления в index.html, если ресурс не найден.

3.1) Внутри папки META-INF создайте файл context.xml и скопируйте в него приведенный ниже контекст.

    <? xml version='1.0' encoding='utf-8'?>
    <Context>
      <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
    </Context>

3.2) Внутри WEB-INF создайте файл rewrite.config (этот файл содержит правило перезаписи URL и используется tomcat для перезаписи URL). Внутри rewrite.config скопируйте содержимое ниже:

      RewriteCond %{SERVLET_PATH} !-f
      RewriteRule ^/(.*)$ /index.html [L]
...