2015-07-14 4 views
1

Я два приложения Tomcat развернут в двух различных контекстах:Переписывание кот 8 URLs

someurl.com/context1/ 
someurl.com/context2/ 

Мне нужно перехватывать URLs в виде:

someurl.com/clientname/context1/ 

и перенаправлять их на URL:

someurl.com/context1/clientname 

где "ClientName" является динамическим

Я попытался использовать переписывающий клапан в элементе моего tomcats server.xml файла, но он по-прежнему работает только для URL-адресов, которые включают контекст. то есть:

someurl.com/context1/clientname/context1 

получает переписан в

someurl.com/context1/clientname 

используя следующее регулярное выражение:

RewriteCond %{REQUEST_URI} ^.*/context1/.*$ 

RewriteRule ^.*/context1/(.*)$ /context1/$1 [L] 

Есть ли способ, чтобы глобально переписывают URLs таким образом, что контекст не принимается во внимание?

+0

Ваша цель - не делать этого в Java на уровне фильтра? Я предполагаю, что у вас есть это как конфигурация, так как она соответствует файлу class/jar? –

+0

Исправить. Я действительно нашел решение, поэтому опубликую ответ чуть позже. –

ответ

1

После многократного поиска я обнаружил очень простой способ достижения желаемого результата. Хитрость заключается в настройке корневого контекста без развертывания там реального приложения. Затем к этому корневому контексту RewriteValve добавляется так:

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

Важно, что crossContext установлена ​​истине, поэтому Корневой контекст может взаимодействовать с нижайшими контекстами уровня.

Затем в WEB-INF корневого контекста следующие rewrite.config будет делать трюк:

RewriteRule ^/.*/context1/(.*)$  /context1/$1 [L] 

, которые в основном означает: захватить все Ура, которые имеют вид: CLIENTNAME/context1/и т.д. и направить их на context1/clientname/etc