2017-01-05 6 views
1

Я хочу направить любую ссылку, отличную от статического ресурса (например, js, images и т. Д.), На мой index.html. Я внес следующие изменения.Переделка клапана Tomcat не работает

Я добавил context.xml в app.war/META-INF каталог на который содержит:

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

У меня также есть rewrite.config в app.war/WEB-INF каталог, который содержит:

RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$ 
RewriteRule ^.*$ - [L] 
RewriteRule ^.*$ /index.html [L,QSA] 

Однако, с указанными выше параметрами, что происходит в том, что все моих файлов js и css показывает содержимое index.html (в консоли браузера). Не могли бы вы предложить, какова будет проблема здесь?

ответ

1

Ваше окончательное правило переписывает все, чтобы /index.html:

RewriteRule ^.*$ /index.html [L,QSA] 

Если вы считаете, что вышеуказанные правила будут соответствовать первым, вы правы, за исключением того, что запрос в файл, например, /styles.css не будет соответствовать выражение, которое вы имеете для статических артефактов:

RewriteCond %{REQUEST_URI} ^/(css|img|js|partials|rest|favicon).*$ 

Проблема заключается в том, что вы требующие css части запроса URI, чтобы иметь по крайней мере один символ после него. Должен работать запрос /css/style.css.

+0

Спасибо за ответ. Я не полностью понимаю проблему, о которой вы говорите. Мои файлы css и js присутствуют как таковые: '/ myapp/project/css/project-123.css''/myapp/project/js/project-123.js' Однако они показывают содержимое index.html. – Dan

+0

Ни один из этих имен файлов не соответствует вашему шаблону регулярных выражений: они начинаются с '/ myapp', а не'/css'. –

+0

Благодарим за выявление проблемы @ Кристофер. Я изменил свой RegEx на '(?!. * \. (?: jpg | png | css | js | json | scss) $). * $', И теперь он работает. – Dan