使用proxypass重写apache

时间:2012-10-16 02:02:01

标签: apache mod-rewrite rewrite proxypass

我正在尝试组合重写和代理传递以及重写问题。这就是我所拥有的

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.world.net
RewriteRule %{HTTP_HOST} http://newexample.newworld.net:7802/apex/f?p=208 [R,P]
ProxyPass / http://newexample.newworld.net:7802/

proxypass正在运行,但我无法弄清楚如何获得初始重定向。因此,如果用户输入example.world.net/apex/f?p=208,则会转到newexample.newworld.net:7802/apex/f?p=208并屏蔽该网址。

但是如果apex / f?p = 208不在网址中,我需要让example.world.net重定向到example.world.net/apex/f?p=208。

2 个答案:

答案 0 :(得分:2)

您无法同时重定向代理。您的重写规则标志为[R,P],即“重定向”和“代理”。你在这里需要一个或另一个。此外,您的规则的正则表达式永远不会与%{HTTP_HOST}匹配,除非您的网址确实是:http://example.world.net/%{HTTP_HOST}。您需要将其更改为:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.world.net
RewriteCond %{QUERY_STRING} !(^|&)p=208(&|$)
RewriteRule ^/?$ /apex/f?p=208 [L,QSA,R]

如果网址栏显示http://example.world.net/http://example.world.net/apex/f?p=208,则会重定向浏览器。然后,代理人需要/apex/f?p=208并将其代理到http://newexample.newworld.net:7802/

mod_proxy和mod_rewrite可能无法很好地协同工作,因为两者最终都会被应用到同一个URL。如果您发现两者同时被应用,请将ProxyPass行更改为:

RewriteRule ^/?(.*)% http://newexample.newworld.net:7802/$1 [L,P,QSA]

答案 1 :(得分:0)

所以你希望 example.world.net 重定向到 http://newexample.newworld.net:7802/apex/f?p=208 或< strong> example.world.net/apex/f?p=208 ?我假设前者,如果我错了将RewriteRule中的url更改为后者。

但我认为应该这样做

RewriteCond %{HTTP_HOST} ^example.world.net$ [NC]
RewriteRule %{HTTP_HOST} http://newexample.newworld.net:7802/apex/f?p=208 [R,L]

但是不知道虚拟主机的名称/别名是什么,所以/在

  

ProxyPass / http://newexample.newworld.net:7802/

可能会打破这一切。