Redirect Apache/IHS HTTP服务器:如何启用区分大小写的上下文uri

Redirect Apache/IHS HTTP服务器:如何启用区分大小写的上下文uri,redirect,url-rewriting,mod-proxy,case-insensitive,Redirect,Url Rewriting,Mod Proxy,Case Insensitive,我有一个multi-tenent应用程序,该应用程序根据已加载tenent的首选项创建上下文uri。例如,如果赞助商选择abcd作为上下文uri,则URL将如下所示: hxxxx://host.domain/abcd/login 有一个Liberty服务器集群,它在后端运行,将满足特定tenent的请求 问题是: 我们的应用程序对上下文url不区分大小写,因此以下任何url都应有效: hxxxx://host.domain/abcd/login hxxxx://host.domain/ABCD

我有一个multi-tenent应用程序,该应用程序根据已加载tenent的首选项创建上下文uri。例如,如果赞助商选择abcd作为上下文uri,则URL将如下所示:

hxxxx://host.domain/abcd/login

有一个Liberty服务器集群,它在后端运行,将满足特定tenent的请求

问题是: 我们的应用程序对上下文url不区分大小写,因此以下任何url都应有效:

hxxxx://host.domain/abcd/login hxxxx://host.domain/ABCD/login hxxxx://host.domain/Abcd/login 等等

当我想要根据上下文uri将请求从IHS IBM HTTP服务器转发到相关tenent的集群时。使用mod_proxy,我可以执行以下操作:

ProxyPass/abcdhxxxx://hostname.domain:port/abcd ProxyPassReverse/abcdhxxxx://hostname.domain:port/abcd

[我已将实际值替换为主机名、域、端口]

如果我这样做,我必须提供字符串abcd的所有组合,以便将它们转发到正确的群集,例如:

ProxyPass/Abcdhxxxx://hostname.domain:port/Abcd ProxyPassReverse/Abcdhxxxx://hostname.domain:port/Abcd ProxyPass/aBcdhxxxx://hostname.domain:port/aBcd ProxyPassReverse/aBcdhxxxx://hostname.domain:port/aBcd 等等

在我看来,这似乎是一个普遍的问题,并期待一些默认的解决方案相同

解决方案1:

拼写检查

[没有为我工作] 我尝试启用mod_speling.so,并将其添加到httpd.conf中。 解决方案2:使用“重写”,我添加了以下内容:

RewriteMap lc int:tolower RewriteRule.*?[A-Z]+.${lc:$1}[R]

参考,http://httpd.apache.org/docs/current/rewrite/rewritemap.htmlint

这将hostname.domain:port/之后的所有内容转换为小写。这不是我想要的,我只是想更改上下文uri字符串abcd的大小写。 我在下面添加对我有效的解决方案。如果您有更好的解决方案,请更新此问题

================================================================================== 对我有效的解决方案是以下重写:

重新启动发动机 重写映射lc int:tolower 重写规则 .*.[A-Z]+.\/[^/]+${lc:$1}$2[R]

此解决方案将abcd的任何混合大小写转换为小写abcd。之后,我可以在/abcd上执行代理传递。ProxyPass的示例已经提供

==================================================================================

如果你有更好的解决办法,请回答这个问题

谢谢, 维沙伦杜

PS:1在所有URL中,hxxxx指的是https,Stackoverflow是 不允许我将其作为https提供。2堆栈溢出不可用 允许我回答我的问题,在 问题