我正在尝试在代理发生之前重写部分 URL ( https://myfirstdomain.com/lool/https:/alf.mydomain.com/service/wopi/files/uuid?query_params
),并且我的默认 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
在虚拟主机上下文中使用时,该
RewriteRule
模式匹配完整的 URL 路径,包括斜杠前缀(这仅在目录上下文中被删除)。请尝试以下方法:
在虚拟主机上下文中使用时,替换时也需要斜杠前缀,以指定文档根相对 URL 路径。
我刚刚扩展了捕获的模式以包含主机名以保存替换中的重复。
文字点应该在
RewriteRule
模式中转义。而斜杠 (/
) 不需要转义。该
QSA
标志在这里是多余的,因为您没有在替代上指定查询字符串。您可能需要也可能不需要
PT
(passthrough
) 标志才能让 mod_proxy 获取它。您还应该删除
<IfModule mod_rewrite.c>
包装器 - 除非它打算在没有 mod_rewrite 的情况下工作?否则,当 mod_rewrite 不可用时,您只会掩盖错误。