Mod rewrite 代理重写到新域?

Mod rewrite 代理重写到新域?,mod-rewrite,apache2,Mod Rewrite,Apache2,我的问题是关于apache2上的RewriteMap:我想应用一个重写条件,以便我的代理上的所有请求都被代理到一个全新的域 例如,localhost/test或任何其他url应该直接访问www.mydomain.com: RewriteRule / http://www.mydomain.com [P] 很好。如果我访问localhost,我仍然会在浏览器地址行中看到“localhost”,但会显示mydomain.com。但是如果我现在点击这个mydomain站点上的任何链接,我会得到一个“

我的问题是关于apache2上的
RewriteMap
:我想应用一个重写条件,以便我的代理上的所有请求都被代理到一个全新的域

例如,
localhost/test
或任何其他url应该直接访问
www.mydomain.com

RewriteRule / http://www.mydomain.com [P]
很好。如果我访问localhost,我仍然会在浏览器地址行中看到“localhost”,但会显示mydomain.com。但是如果我现在点击这个mydomain站点上的任何链接,我会得到一个“未找到”的响应

mydomain的源代码包含以下链接:

<a href="/lab/sale.php">Link</a>

如果我以正常方式访问该网站,结果将是:
www.mydomain.com/lab/sale.php
,并且工作正常

如果我通过我的代理访问该站点,并且发生了重写规则,我将在链接单击后被定向到:
localhost/lab/sale.php
,这当然不存在


问题:如何让通过代理访问站点的用户浏览整个站点,就好像他真的要访问这个站点一样?

重写规则指令不像
ProxyPass
重定向
那样,它们本质上是将两个节点链接在一起,随后的所有内容也会被代理。您只有的规则代理请求URI
/
,而不是
/lab/
/etc.php
或任何其他内容。您需要创建一个匹配项并将其作为反向引用传递:

RewriteRule ^/?(.*)$ http://www.mydomain.com/$1 [P]
或者可以使用%{REQUEST_URI}变量:

RewriteRule ^ http://www.mydomain.com%{REQUEST_URI} [P]

RewriteRule
指令不像
ProxyPass
Redirect
那样将两个节点链接在一起,随后的所有内容也会被代理。您只有的规则代理请求URI
/
,而不是
/lab/
/etc.php
或任何其他内容。您需要创建一个匹配项并将其作为反向引用传递:

RewriteRule ^/?(.*)$ http://www.mydomain.com/$1 [P]
或者可以使用%{REQUEST_URI}变量:

RewriteRule ^ http://www.mydomain.com%{REQUEST_URI} [P]

我不想将请求的路径URI附加到我的重定向中!我只想重定向到一个新位置。在该新位置,如果单击该页面上的链接,则该链接将被计算为localhost/link/path,而不是像普通页面一样工作。@membersound您的原始规则会这样做。它将只代理
/
,而不是
/lab/sale.php
。因此,您单击的链接包含
http://www.mydomain.com/
在前面(重写引擎对此无能为力),或者本地主机上不存在
/lab/sale.php
链接。嗯,我还是不明白。我尝试了以下操作:
RewriteRule/start/?(*)http://www.google.com [P] 
重写规则^/?(*)$http://www.google.com/$1[P]
如果我访问
localhost/start/
,应该显示谷歌页面。在这种情况下,还会发生完全重定向并更改浏览器url。这就是我想要阻止的。浏览器中的url应保持为localhost/start。但是所有的链接都应该在之后生效…@membersound这与规则无关,因为一旦你到了那里,谷歌就会重新引导你。Ok会让大家明白这一点。无论如何,就我的具体情况而言,我仍然无法让它发挥作用。我有一个主机文件。如果转到localhost/start/key,则会在hosts中查找密钥并返回dns。因此,将显示该网站,同时仍显示localhost/start/key。该网站中包含的每个链接都应该是可用的,就像我直接访问它一样。我尝试了:
RewriteRule/start/?(*)$http://${myhosts:$1}/[P]
RewriteRule^/?(*)$http://${myhosts:$1}/$1[P]
。但这仍然不起作用。我不想将请求的路径URI附加到我的重定向中!我只想重定向到一个新位置。在该新位置,如果单击该页面上的链接,则该链接将被计算为localhost/link/path,而不是像普通页面一样工作。@membersound您的原始规则会这样做。它将只代理
/
,而不是
/lab/sale.php
。因此,您单击的链接包含
http://www.mydomain.com/
在前面(重写引擎对此无能为力),或者本地主机上不存在
/lab/sale.php
链接。嗯,我还是不明白。我尝试了以下操作:
RewriteRule/start/?(*)http://www.google.com [P] 
重写规则^/?(*)$http://www.google.com/$1[P]
如果我访问
localhost/start/
,应该显示谷歌页面。在这种情况下,还会发生完全重定向并更改浏览器url。这就是我想要阻止的。浏览器中的url应保持为localhost/start。但是所有的链接都应该在之后生效…@membersound这与规则无关,因为一旦你到了那里,谷歌就会重新引导你。Ok会让大家明白这一点。无论如何,就我的具体情况而言,我仍然无法让它发挥作用。我有一个主机文件。如果转到localhost/start/key,则会在hosts中查找密钥并返回dns。因此,将显示该网站,同时仍显示localhost/start/key。该网站中包含的每个链接都应该是可用的,就像我直接访问它一样。我尝试了:
RewriteRule/start/?(*)$http://${myhosts:$1}/[P]
RewriteRule^/?(*)$http://${myhosts:$1}/$1[P]
。但这仍然行不通。