根据 url 路径重定向到不同的服务器

Posted

技术标签:

【中文标题】根据 url 路径重定向到不同的服务器【英文标题】:redirect to different server based on url path 【发布时间】:2013-11-27 15:57:09 【问题描述】:

我已经为一个将 Intranet 集成到旧网站中的客户创建了一个新网站。

新网站目前在不同的服务器上,但是当域 A 记录指向新服务器时,旧网站(和内网)显然无法访问,但我需要保持他们的内网处于活动状态。他们的内网路径是:abc.com/intranet

有没有办法让 URL 路径直接指向旧服务器?例如:

abc.com - new website loads on new server

abc.com/intranet - old website loads on older server

如果不可能,我想我正在考虑在 abc.com 上为 Intranet 创建一个子域。任何想法表示赞赏。

【问题讨论】:

我添加了一个答案,但我不是 100% 清楚重新阅读您的问题究竟是什么目标。您绝对不需要子域。你能清楚地区分并更简洁地解释你的问题吗? 【参考方案1】:

您需要使用 Apache RewriteRule 和 mod_rewrite。这可以放在服务器根目录下的 .htaccess 文件中,也可以直接放在 Apache 配置文件中。

如果您想将 example.com 重定向到 example.com/intranet,那么这就是应该满足您需求的 Apache RewriteRule

RewriteEngine on
RewriteRule ^(.*)$ /intranet [L,R=301]

这将抓取该RewriteRule 所在站点上的任何URL,并将它们重定向到/intranet/intranet 也可以是完整的 URL,如下例所示:

RewriteEngine on
RewriteRule ^(.*)$ http://example.com/intranet [L,R=301]

编辑:重新阅读您的问题后,我不能 100% 确定上述答案是否适合您。所以我认为,如果您正在描述如何将一个 URL 路径从一台服务器指向另一台服务器,您会这样做。这被放置在新服务器上:

RewriteEngine on
RewriteRule ^/intranet(.*)$ http://old_example.com/intranet [L,R=301]

这将抓取来自 new_example.com/intranet 的任何 URL 并将其重定向到 old_example.com/intranet

另一个编辑:由于原始海报表明服务器将完全更改 IP,因此旧服务器的子域是最好的方法。如果您将域完全切换到不同的 IP,则无法按照您描述的方式重定向一个域上的内容。两台服务器都需要使用一个活跃但不同的域名才能实现您想要发生的事情。

【讨论】:

感谢您的意见。再澄清一点。每个服务器都有自己的公共 IP。在 abc.com 上,A 记录的公共 IP 指向较旧的服务器。但是,当我想使用新站点时,我会将 abc.com 的 A 记录更改为新的 IP/服务器。这意味着没有人能够通过访问 abc.com/intranet 访问旧服务器的 Intranet。我试图找到一种在新服务器上进行重定向的方法,这样如果有人想访问 Intranet,他们就会被定向到旧服务器。我看不出有什么办法,但也许你知道一个窍门。 好的,如果是这样的话,那么旧服务器的子域是最好的选择。如果您将域完全切换到不同的 IP,则无法按照您描述的方式重定向一个域上的内容。两台服务器都需要使用一个活跃但不同的域名才能实现您想要发生的事情。 子域是我要走的路线。谢谢。【参考方案2】:

abc.com/intranet 是您的 Web 服务器公开的虚拟文件系统中的路径,因此无法提供来自不同 Web 服务器的内容。这里有 2 个选项。

    在两台服务器前放置一个反向代理,根据原始客户端请求从服务器A或B获取内容。

    如您所说,创建一个子域并将 /intranet 重定向到新的子域。

希望对您有所帮助!

【讨论】:

以上是关于根据 url 路径重定向到不同的服务器的主要内容,如果未能解决你的问题,请参考以下文章

客服端重定向和服务器重定向

从本地驱动器重定向到服务器

Nginx的location匹配规则-根据url 路径重定向到不同的IP

重定向到 Ktor 中的绝对 URL

服务器重定向和客户端重定向

Apache将位置从新服务器重定向到旧服务器