URL соответствует нескольким местоположениям.Как выполнять инструкции только из первого Местоположения? - PullRequest
2 голосов
/ 14 декабря 2011

У нас есть следующая конфигурация в Apache httpd.conf:

<Location /app/srv>
   ...   
   ProxyPass http://localhost:123/srv
   ProxyPassReverse http://localhost:123/srv

   Header edit Set-Cookie JSESSIONID srv.${ENV}.JSESSIONID
   RequestHeader edit Cookie srv.${ENV}.JSESSIONID JSESSIONID
</Location>

#Following instructions do not work!
#ProxyPass /app/srv !
#ProxyPass /app !

<Location /app >
   ...
   ProxyPass http://localhost:123/app
   ProxyPassReverse http://localhost:123/app

   Header edit Set-Cookie JSESSIONID app.${ENV}.JSESSIONID
   RequestHeader edit Cookie app.${ENV}.JSESSIONID JSESSIONID
</Location>

Насколько я вижу в случае запроса с контекстным путем / app / srv coockie, JSESSIONID будет редактироваться два раза.
И в результате будет переименован в srv. $ {ENV} .app. $ {ENV} .JSESSIONID

Но мне нужно переименовать Куки в srv. $ {ENV} .JSESSIONID

Я могу видеть такое поведение на одной нашей тестовой коробке.
Можно ли остановить обработку после директивы «Location / app / srv»?

Я пытался добавить инструкцию " ProxyPass / app / srv! " после директивы " Location / app / srv ", но это не помогает.

UPDATE:
Я не знаю, какой полный контекстный путь может быть для /app.
Это может быть / app / page1, / app / page2 и т. Д.
Я только знаю, что существуют контекстные пути / app / srv и / app / что-то.
И я хотел бы иметь разные инструкции для контекстных путей / app / srv и / app / что-то.

1 Ответ

1 голос
/ 14 декабря 2011

Вы должны иметь возможность использовать LocationMatch , чтобы получить то, что вы хотите, как это:

<LocationMatch "^/app/?$" >

Это должно соответствовать / app и / app /, но не /app/srv.

...