Угловая глубокая связь - Apache Tomcat - PullRequest
0 голосов
/ 26 апреля 2018

Я создаю приложение Angular. Это размещено с базой href как /hris. Поэтому мой базовый URL для доступа к приложению будет domain.com/hris. Кроме того, у меня есть 3 разных приложения, одно из которых называется term. Поэтому, когда я нажимаю на ссылку term, она переходит на domain.com/hris/term.

Когда пользователь напрямую пытается получить доступ к ссылке domain.com/hris/term, он возвращает 404 с сообщением: HTTP Status 404 - /hris/term.

Я не хочу, чтобы 404 происходило. Как это сделать?

Что я сделал до сих пор:

Я попытался создать файл .htaccess в папке, где находится index.html (я создал приложение Angular, используя ng build --base-href=/hris/). Я развернул папку dist на сервере в каталоге с именем hris.

В файле .htaccess я использовал следующие варианты, но безрезультатно.

1

    <IfModule mod_rewrite.c>
          Options Indexes FollowSymLinks
          RewriteEngine On
          RewriteBase /hris/
          RewriteRule ^index\.html$ - [L]
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule . index.html [L]
    </IfModule>

2

    <IfModule mod_rewrite.c>
       Options Indexes FollowSymLinks
       RewriteEngine On
       RewriteRule ^index\.html$ - [L]
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteRule . /index.html [L]
    </IfModule>

3

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{REQUEST_FILENAME} -s [OR]
        RewriteCond %{REQUEST_FILENAME} -l [OR]
        RewriteCond %{REQUEST_FILENAME} -d
        RewriteRule ^.*$ - [NC,L]
        RewriteRule ^(.*) index.html [NC,L]
   </IfModule>

Я использую Angular 5. Пожалуйста, дайте мне знать, если мой подход правильный, или что я должен сделать, чтобы это произошло.

Версия: Apache Tomcat 7 - версия 7.0.64

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Для устранения проблемы с глубокой связью при развертывании углового приложения (с маршрутизацией PathLocationStrategy) на сервере Apache Tomcat (8, 9) -

  1. Настройка RewriteValve в server.xml
  2. Запишите правило перезаписи в rewrite.config

server.xml -

...
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

...
      </Host>
...

rewrite.config - (note - / hello / - это контекстный путь углового приложения на tomcat)

RewriteCond %{REQUEST_PATH} !-f
RewriteRule ^/hello/(.*) /hello/index.html

Я задокументировал это в своей статье - Исправление проблемы с глубокими ссылками - Развертывание углового приложения на сервере Tomcat

0 голосов
/ 27 апреля 2018

Файлы ". Htaccess" не работают на Tomcat. Поместите конфигурацию для перезаписи в файл WEB-INF/rewrite.conf, возможно, так:

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

Затем вам нужно добавить файл с именем META-INF/context.xml, который позволяет перезаписать, т. Е .:

<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" tldValidation="false" xmlValidation="false">

  <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

</Context>

Также удалите HashLocationStrategy из вашего приложения Angular.

...