【问题标题】:URL matches several Locations. How to perform instructions from the first Location only?URL 匹配多个位置。如何仅从第一个位置执行指令?
【发布时间】:2012-01-20 05:48:05
【问题描述】:

我们在 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

但我需要将 coockie 重命名为 srv.${ENV}.JSESSIONID

我可以在我们的一个测试盒上看到这种行为。
是否可以在“Location /app/srv”指令​​之后停止处理?

我尝试在指令“Location /app/srv”之后添加指令“ProxyPass /app/srv !”,但它没有帮助。

更新:
我不知道 /app 的完整上下文路径是什么。
它可能是 /app/page1、/app/page2 等。
我只知道存在 /app/srv 和 /app/something 上下文路径。
我想对 /app/srv 和 /app/something 上下文路径有不同的说明。

【问题讨论】:

    标签: apache apache2 httpd.conf


    【解决方案1】:

    你应该可以使用LocationMatch 来获得你想要的东西:

    <LocationMatch "^/app/?$" >
    

    应该匹配 /app 和 /app/ 但不匹配 /app/srv。

    【讨论】:

    • 实际上我不知道 /app 的完整上下文路径。它可能是/app/page1。我只知道可能有 /app/srv 和 /app/ 上下文路径。我想对 /app/srv 和 /app/ 上下文路径有不同的说明。
    • 在这种情况下,匹配 ^/app/(?!srv) 应该匹配任何以 /app/ 开头但后面没有 srv 的内容。
    猜你喜欢
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多