如何在 apache 2.4 中代理之前替换部分 URL 请求?

如何在 apache 2.4 中代理之前替换部分 URL 请求?

https://myfirstdomain.com/lool/https:/alf.mydomain.com/service/wopi/files/uuid?query_params我试图在代理发生之前重写 URL 的一部分( ),并且我的默认 SSL vhost 中有以下相关部分:

 <IfModule mod_rewrite.c>
    RewriteEngine   On
    LogLevel debug rewrite:trace3

    RewriteRule ^lool/https:/alf.mydomain.com\/(.*) lool/https://alf.mydomain.com/$1 [QSA,NE]
</IfModule>

ProxyPass               /       https://localhost:2323/
ProxyPassReverse        /       https://localhost:2323/

我在重写日志中看到了这一点:

applying pattern '^lool/https:/alf.mydomain.com' to uri '/lool/https:/alf.mydomain.com/service/wopi/files/uuid

但在接收此信息的服务上,我发现 URL 尚未重写。如果能提供任何线索,告诉我哪里做错了,我将不胜感激。我本质上是在尝试添加/被代理服务器删除的额外内容,而这些内容位于我无法访问的基础设施的某个地方。

编辑: 在后端 WOPI 服务的日志中,它看到未经修改的请求 URL:

Request from 127.0.0.1:42035: GET /lool/https:/alf.mydomain.com/service/wopi/files/uuid

答案1

RewriteRule ^lool/https:/alf.mydomain.com\/(.*) lool/https://alf.mydomain.com/$1 [QSA,NE]

当用于虚拟主机上下文,RewriteRule 图案匹配完整的 URL 路径,包括斜杠前缀(这仅在以下情况下被删除:目录语境)。

请尝试以下类似操作:

RewriteRule ^/lool/https:/(alf\.mydomain\.com/.*) /lool/https://$1 [PT,NE]

斜线前缀也是必需的代换在虚拟主机上下文中使用时,为了指定文档根目录相对 URL 路径。

我刚刚扩展了捕获的模式以包含主机名,以避免重复代换

文字点应该在RewriteRule 图案. 而斜杠 ( /) 则无需转义。

QSA标志在这里是多余的,因为您没有在代换

您可能需要或不需要PTpassthrough)标志才能让 mod_proxy 接收它。

您还应该删除<IfModule mod_rewrite.c>包装器 - 除非这是为了在没有 mod_rewrite 的情况下工作?否则,当 mod_rewrite 不可用时,您只会掩盖错误。

相关内容