【问题标题】:Proxy rewriting to new domain?代理重写到新域?
【发布时间】:2012-08-15 07:52:33
【问题描述】:

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

例如localhost/test 或任何其他网址应该转到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,并且工作正常。

如果我通过代理访问该站点并且发生了 rewriteRule,我会在链接点击后被定向到:localhost/lab/sale.php,这当然不存在。

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

【问题讨论】:

    标签: mod-rewrite apache2


    【解决方案1】:

    RewriteRule 指令不像 ProxyPassRedirect 指令,它们本质上将 2 个节点链接在一起,并且它后面的所有内容也会被代理。您拥有only 的规则代理请求 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/(重写引擎对此无能为力),要么 localhost 上不存在 /lab/sale.php 链接。
    • 嗯,我还是不明白。我试过这个:RewriteRule /start/?(.*) http://www.google.com [P]RewriteRule ^/?(.*)$ http://www.google.com/$1 [P],如果我访问localhost/start/,它应该会显示谷歌页面。在这种情况下,还会发生完全重定向并更改浏览器 url。这是我想防止的。浏览器中的 url 应该保持 localhost/start。但是所有链接都应该在之后工作......
    • @membersound 这与规则无关,因为一旦你到达那里,谷歌就会重定向你。
    • Ok 让大家了解清楚。无论如何,对于我的具体情况,我仍然无法让它工作。我有一个主机文件。如果我转到 localhost/start/key,则会在主机中查找密钥并返回 dns。所以这个网站出现了,而 localhost/start/key 仍然显示。然后,该网站中包含的每个链接都应该可以使用,就像我直接访问它一样。我试过了:RewriteRule /start/?(.*)$ http://${myhosts:$1}/ [P]RewriteRule ^/?(.*)$ http://${myhosts:$1}/$1 [P]。但这仍然行不通。
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2013-01-10
    • 2012-05-19
    • 2017-11-17
    • 2015-05-21
    • 2012-10-17
    • 2016-02-12
    • 1970-01-01
    相关资源
    最近更新 更多