因此目前我在 Oracle HTTP Server 实例上配置了一个虚拟主机,并使用 ProxyPass 如下:
ProxyPass ^/test/home/ https://example.com/
ProxyPassMatch ^/test/home/(.*)$ https://example.com/$1
ProxyPassReverse ^/test/home/(.*)$ https://example.com/$1
当我尝试访问时,https://mywebsite.com/test/home/<url_from_other_server>
请求似乎按预期工作。但是,当我尝试访问时,https://mywebsite.com/test/home/
它没有代理我,https://example.com/
而是返回 404。
通配符ProxyPassMatch
似乎对我尝试访问的所有子网址都有效,但常规ProxyPass
关键字却无效。
我也尝试过完全删除ProxyPass
,但在尝试访问 /test/home/ 时,仍然出现同样的 404 错误
有人知道是什么导致了这种奇怪的行为吗?
谢谢。
答案1
您的正则表达式不太正确。*
表示“零次或多次出现”,因此https://mywebsite.com/test/home/
与它匹配。更改(.*)
为(.+)
,表示“一次或多次出现”。那么您的 ProxyPassMatch 应该不再与该 URL 匹配。
或者直接删除 ProxyPassMatch 行,它没什么用,ProxyPass 行会自动处理 URL 。
ProxyPass /test/home/ https://example.com/
ProxyPassReverse /test/home/ https://example.com/
答案2
问题已解决。此特定问题的正确配置如下:
ProxyPass /test/home(.*)$ https://example.com/$1
ProxyPassReverse /test/home(.*)$ https://example.com/$1
删除斜线并添加通配符使我们能够代理后续的任何内容/test/home
。
谢谢大家的意见。