2015-02-27 7 views
9

У меня есть веб-сайт AngularJS и Джерси. Мне нужно настроить переписывание URL-адресов, поэтому все, кроме заданных исключений, будет переписано в index.html Angular.Tomcat 8 URL Rewrite

Например .:

http://my.domain.com/about will be rewritten 
http://my.domain.com/photos/photo1.jpg will NOT be rewritten (file photo 1 exists) 
http://my.domain.com/rest/myservice will be NOT be rewritten (it is a call to REST service) 

Я настроить Tomcat 8 URL Rewrite клапан следующим образом:

в конф/server.xml

<Host name="my.domain.com" appBase="webapps/MyDomainServer" unpackWARs="true" 
      autoDeploy="true" 
      xmlValidation="false" xmlNamespaceAware="false"> 
    <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" /> 
    <!-- access logging, aliases,...--> 
</Host> 

в конф/Catalina/my.domain.com/rewrite.config

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} ^/rest.* 
RewriteRule^- [L] 

RewriteRule^index.html [L] 

Tomcat игнорирует мои настройки перезаписи, ничего не переписывается, в журнале нет ошибки/исключения. Что я делаю не так? Заранее спасибо.

Я попытался переместить RewriteValve в config.xml в META-INF и переписать config на WEB-INF, но он поступил так же.

ответ

7

Я нашел решение, проблема заключалась в неправильном/неисправном файле rewrite.config. Correct должно быть:

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

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

На первой строке перечислены идентификаторы URI, которые не должны быть переписаны. Все остальное будет переписано index.html.

+1

Но почему это было ошибкой? У меня такая же проблема. % {REQUEST_FILENAME} всегда NULL ... –

+1

... и SCRIPT_FILENAME правильный, но RewriteCond% {SCRIPT_FILENAME} -f жалуется на отсутствие ведущего/ресурса. Это система Windows. Таким образом, путь: C: \ ... без ведущего/ –

+0

В нашем случае мы использовали {REQUEST_URI} вместо (REQUEST_FILENAME}. Мы не могли полностью отказаться от правил, потому что нам не удалось загрузить локальные ресурсы в приложение, но заменяя! -f и! -d на использование REQUEST_URI, похоже, работает, по крайней мере на данный момент. –

3

Разве это развертывается как веб-приложение java (WAR)? Вы могли бы реализовать это в web.xml:

<servlet> 
    <servlet-name>index</servlet-name> 
    <jsp-file>/index.html</jsp-file> 
</servlet> 

<servlet-mapping> 
    <servlet-name>index</servlet-name> 
    <url-pattern>/</url-pattern> 
    <url-pattern>/about</url-pattern> 
    .. as many as you need .. 
<servlet-mapping> 
+0

Спасибо Николаю, это кажется интересным вариантом, но мне удалось его решить, используя переписывание. У меня был неправильный файл rewrite.config. – kamelot

0

Я не мог заставить это работать с REQUEST_URI, и мне все равно не хотелось, чтобы в белый список были определенные файлы, поэтому я решил его в slightly different manner.