我已经search了很高的解决scheme,希望只是我。 我想要做的是将所有stream量从我们托pipe的URLredirect到由我们购买的另一个提供商托pipe的另一台服务器,以便我们可以自定义根URL。
我正在使用httpd 2.2.3(Apache)。 这是在一个VirtualHost部分configuration的,它也是SSL(我不认为这应该很重要)。
一切都很好,除了排除。
我有(简化)是:
ProxyPreserveHost On <VirtualHost 1.2.3.4:443> SSLProxyEngine On ProxyPassMatch ^/$ ! ProxyPassMatch ^/(.*)$ https://proxy.example.com/$1 ProxyPassReverse / https://proxy.example.com/ SSLEngine on ... </VirtualHost>
但是它总是去远程站点。 我已经尝试了一堆组合,如:
ProxyPassMatch / $!
ProxyPassMatch ^ /(。*)$ https://proxy.example.com/$1
ProxyPassMatch com /!
ProxyPassMatch ^ /(。*)$ https://proxy.example.com/$1
我也尝试了另一种方式(在/之后与任何东西匹配,即:
ProxyPassMatch ^ /(.. +)$ https://proxy.example.com/$1
ProxyPassMatch /!
ProxyPassMatch ^ /(.. *)$ https://proxy.example.com/$1
ProxyPassMatch /!
现在的文档说它匹配的URL,但我没有发现证据,这是它实际上做了什么(即:与com /上面的第二个变种)。
我也尝试了一些其他的组合,或者匹配一切,或者什么都不匹配。
我的想法是我不理解获得正则expression式的URL,但不知道如何看待它。 我已经调出了Apache的debugging级别进行debugging ,也没有给出任何有用的东西。
干杯。
我想出了一个答案,或更多的解决方法:使用另一台服务器(在这种情况下本地服务器仍然在同一个httpd实例)。
即:上面的行现在阅读:
ProxyPassMatch ^/$ 127.0.0.1:81 ProxyPassMatch ^/(.*)$ proxy.example.com/$1
(加上通常的主机configuration在新端口上运行,并在该端口上configuration虚拟主机)。 这有点乱,但似乎把它整理出来!
我仍然渴望知道自己是否做了错误的事情,并且有一个“正确的”答案 – 因为我认为这有些黑客。
如果我不得不猜测,我会说你的问题来自“^ /。* $”匹配,匹配“/”。 如果您将明确的匹配删除了/并用“^ /。+ $”replace了代理通行证,则可能会解决您的问题。 没有承诺,但。
不同之处在于*相当于{0,},而+相当于{1,},因此。*将匹配任何或不包含字符,而您至less需要一个匹配。