如何重写通过apaches mod_代理的URL

如何重写通过apaches mod_代理的URL,apache,mod-rewrite,proxy,url-rewriting,mod-proxy,Apache,Mod Rewrite,Proxy,Url Rewriting,Mod Proxy,我已经使用mod_proxy和mod_proxy_http将Apache2.2服务器配置为一个简单的转发代理 当客户端请求以下格式的URL时: http://specific.host.com/specific?specificarg1=(.+)&specificarg2=(.+)&specificarg3=specificvalue 以重写形式请求,其中specificarg1和specificarg2的值替换为我的服务器配置中定义的值 也可以不使用正则表达式,而是将一个特定

我已经使用mod_proxy和mod_proxy_http将Apache2.2服务器配置为一个简单的转发代理

当客户端请求以下格式的URL时:

http://specific.host.com/specific?specificarg1=(.+)&specificarg2=(.+)&specificarg3=specificvalue
以重写形式请求,其中specificarg1和specificarg2的值替换为我的服务器配置中定义的值

也可以不使用正则表达式,而是将一个特定url重写为另一个特定url,但我更喜欢使用正则表达式匹配

因此,在阅读了mod_rewrite、mod_proxy的文档之后,我尝试了以下方法来实现某种形式的重写:

重写规则。*[p,L
]

就像在服务器配置中一样,在代理上浏览时,不会重写任何内容

<VirtualHost *:80>
ServerName domain-i-tried-to-surf-to.com
`RewriteRule .* http://www.google.com/ [P,L]
</VirtualHost>
那也不走运

ProxyRemote * http://www.google.com
也没有运气


我还尝试将重写规则放入proxymatch指令中,但我无法重写url。有人能给我指出正确的方向吗?

您首先需要在开始时在语句上添加一个
重写引擎,甚至让mod_rewrite来处理任何规则。

可能应该提到我负责所有要启动的模块和引擎。我认为所有规则都不匹配,因为网页的来源不是本地服务器。我认为这些指令旨在处理当前主机后面的资源。无需用户确认代理whatsover。我想要的是重写通过转发代理请求的URL,但这些URL的来源不是本地服务器。我知道这有点脱离主流,但我认为这应该是可能的,但文档在这方面相当模糊……一个“解决办法”是通过在/etc/hosts中过度加载ip,将特定域上的请求强制发送到另一台服务器,然后另一台服务器配置了一个vhost vhost容器来侦听它,然后处理重写规则。但我不想让第二台服务器参与进来……啊。那么澄清一下:您让服务器A充当服务器B的代理,并将重写表达式放在服务器A中?如果是这样的话,你能编辑你的问题并包含服务器A的整个配置文本吗?这样我就可以确定什么是什么,因为这样应该可以正常工作,但我无法从你提供的代码片段中判断发生了什么。很抱歉,你是对的。我必须在proxymatch指令中包含rewriteengine。现在我的url使用位置重定向进行重定向,尽管我包含了[P]标志。有什么想法吗?我在serverconfig中打开了proxyrequests,而不是在proxymatch目录中(这会产生一个错误)-我正在编辑questino,以使每件事情都更清晰。嗯,次要的一点是:如果你使用的是
P
,那么你就不需要一个
L
,正如它所暗示的那样。我猜您的位置重定向实际上来自您代理的服务器,而不是mod_rewrite(除非您的
RewriteRule
中有一个错误的
R
指令)。
ProxyRemote * http://www.google.com