Фон
JBoss 7.1.5 EAP back-end с угловым интерфейсом 7.
Мне нужно, чтобы JBoss знал о маршрутах пользовательского интерфейса, но переписал их все на страницу индекса пользовательского интерфейса для маршрутизации по Angular.
Проект структурирован таким образом:
webapp/
WEB-INF/
undertow-handlers.conf
web.xml
...etc
login/
background.jpg
login.jsp
index.jsp
assets/*
...html
...js
...css
index.jsp
просто response.sendRedirect("index.html")
s, где index.html является частью активов, созданных Angular CLI. JavaScript и HTML подаются с webapp/
, изображения с webapp/assets/
.
Конфигурация
С standalone-full.xml
<subsystem xmlns="urn:jboss:domain:undertow:4.0">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="http" socket-binding="http" redirect-socket="https"/>
<host name="default-host" alias="localhost,workstation">
<location name="/" handler="welcome-content"/>
<filter-ref name="request-dumper"/>
</host>
</server>
<servlet-container name="default">
<jsp-config x-powered-by="false"/>
<websockets/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
<filters>
<filter name="request-dumper" module="io.undertow.core" class-name="io.undertow.server.handlers.RequestDumpingHandler"/>
</filters>
</subsystem>
и
<subsystem xmlns="urn:jboss:domain:web:2.2" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host">
<alias name="localhost"/>
<alias name="workstation"/>
</virtual-server>
</subsystem>
При указанной выше конфигурации я вижу ожидаемый журнал сервера:
[org.wildfly.extension.undertow] (ServerService Thread Pool -- 84) WFLYUT0021: Registered web context: '/' for server 'default-server'
И я могу получить доступ к странице входа на сайт, а URI /
обслуживает главную страницу углового индекса и ресурсы, как и ожидалось.
Проблема
Мне нужно, чтобы пути в этом контексте (например, /base
или /shop/60
) обрабатывались Angular, поэтому они перенаправляются на index.
Как простой тест, основанный на этом ответе , я попробовал это единственное правило в WEB-INF/undertow-handlers.conf
:
exists(%{RELATIVE_PATH}) -> done
path-prefix('/') -> rewrite('/');
но похоже ничего не делает когда я получаю 404.
Я пробовал -> rewrite('/index.html')
и -> rewrite('/index.jsp')
безрезультатно.
Файл явно читается, потому что, если я помещаю мусор в файл, он выдает исключение в журнале сервера.
UT000045: Error parsing predicated handler string Invalid expression:
# path('/base') -> rewrite('/')
Что я пропустил?
Я вполне неофит для JBoss и всей экосистемы Undertow; пожалуйста, дайте мне знать, какие еще детали я должен добавить к этому вопросу.
Любопытство
С активированным дампером запросов я вижу один начальный запрос к /
, сделанный JBoss (User-Agent=Java/1.8.0_181
) сразу после загрузки, но когда я перехожу к /
из браузера, я не вижу этот запрос в свалка. Но я вижу неудавшийся запрос на /base
. Почему это так?