URL 匹配多个位置。如何仅从第一个位置执行指令?

Posted

技术标签:

【中文标题】URL 匹配多个位置。如何仅从第一个位置执行指令?【英文标题】:URL matches several Locations. How to perform instructions from the first Location only? 【发布时间】: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 上下文路径有不同的说明。

【问题讨论】:

【参考方案1】:

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

<LocationMatch "^/app/?$" >

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

【讨论】:

实际上我不知道 /app 的完整上下文路径。它可能是/app/page1。我只知道可能有 /app/srv 和 /app/ 上下文路径。我想对 /app/srv 和 /app/ 上下文路径有不同的说明。 在这种情况下,匹配 ^/app/(?!srv) 应该匹配任何以 /app/ 开头但后面没有 srv 的内容。

以上是关于URL 匹配多个位置。如何仅从第一个位置执行指令?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅从 google adword api 整合地理位置?

当位置返回多个结果时,在谷歌地图中选择第一个匹配静态

如何仅从 URL 中获取搜索词,忽略多个分隔符

如何控制 NGINX 'Location' 指令匹配顺序?

Google Maps 多个多边形,从第一个多边形位置开始第二个多边形

仅从 GPS 获取位置更新,而不是从网络获取