Mod rewrite Apache2-使用mod_rewrite代理到另一个域

Mod rewrite Apache2-使用mod_rewrite代理到另一个域,mod-rewrite,url-rewriting,apache2.4,Mod Rewrite,Url Rewriting,Apache2.4,我正在运行Apache2.4,并使用mod_rewrite来实现以下功能-我需要代理几个不同的内部站点,以便它们看起来是托管在同一台服务器上的。举个例子,我希望这样做的方式是使用http://myserver/osnews 它将代理www.osnews.com和http://myserver/slashdot它将代理www.slashdot.org中的内容。我在apache conf文件中定义了以下重写规则: RewriteCond %{REQUEST_URI} ^/osnews(/?.*) [

我正在运行Apache2.4,并使用mod_rewrite来实现以下功能-我需要代理几个不同的内部站点,以便它们看起来是托管在同一台服务器上的。举个例子,我希望这样做的方式是使用
http://myserver/osnews
它将代理
www.osnews.com
http://myserver/slashdot
它将代理
www.slashdot.org
中的内容。我在apache conf文件中定义了以下重写规则:

RewriteCond %{REQUEST_URI} ^/osnews(/?.*) [NC]
RewriteRule ^/osnews(.*) http://www.osnews.com$1 [P]

RewriteCond %{REQUEST_URI} ^/slshdot(/?.*) [NC]
RewriteRule ^/osnews(.*) http://www.slashdot.org$1 [P]
问题是,这会破坏代理站点中的所有样式表和图像。我认为这是因为重写的URL的形式是
http://myserver/story/28554/Russia_unveils_homegrown_PC_microprocessor_chips
而不是
http://myserver/osnews/story/28554/Russia_unveils_homegrown_PC_microprocessor_chips

相反,如果我尝试这样的方法,效果很好(我没有将该站点作为原始url的一部分,所以
http://myserver
将仅代理
http://www.osnews.com
):

所以,我需要的是如何保存URL
http://mysite/osnews/some-resource
代理从
http://osnews.com/some-resource


谢谢

因此,我使用mod_代理而不是mod_重写实现了这一点。我使用的配置(在VirtualHost上下文中)是:

ProxyPass/osnews.com/http://www.osnews.com/
ProxyHTMLMAPhttp://www.osnews.com /奥斯新闻网
#日志级调试代理\u html:trace5
ProxyPassReverse/osnews.com/
可代理的
ProxyHtmlexOn
ProxyHtmlURL地图^//osnews.com/R
ProxyHTMLURLMap^/css/(.*)/osnews.com/css/$1 Rc
ProxyHTMLURLMap^/images/(.*)/osnews.com/images/$1 Rc
RequestHeader未设置接受编码
需要注意的一点是,如果您在Ubuntu上使用apache2(我的例子是Lubuntu 15.04),默认情况下不会提供mod proxy_html的配置文件。您需要创建它,然后使用
a2enmod proxy\u html
启用它。本文对其进行了很好的总结:

我发现ProxyHtmlexted输出过滤器仍然存在一些问题,无法正确映射URL。但我希望最终能解决这些问题

RewriteCond %{HTTP_HOST} ^myserver$ [NC]                                                          
RewriteRule ^ http://www.osnews.com%{REQUEST_URI} [P]  
    ProxyPass /osnews.com/ http://www.osnews.com/
    ProxyHTMLURLMap http://www.osnews.com /osnews.com
    #LogLevel debug proxy_html:trace5
    <Location /osnews.com/>
        ProxyPassReverse /osnews.com/
        ProxyHTMLEnable On
        ProxyHTMLExtended On
        ProxyHTMLURLMap ^/ /osnews.com/ R
        ProxyHTMLURLMap ^/css/(.*) /osnews.com/css/$1 Rc
        ProxyHTMLURLMap ^/images/(.*) /osnews.com/images/$1 Rc
        RequestHeader    unset  Accept-Encoding
    </Location>