将子域名迁移到子目录,同时在单独的服务器上运行

将子域名迁移到子目录,同时在单独的服务器上运行

我目前正在开发一个由两台不同服务器托管的网站。一台服务器托管主网站 (example.co.uk),另一台服务器托管电子商务应用程序 (Magento),目前可通过 shop.example.co.uk 访问。

我对托管电子商务网站的服务器有完全访问权限,对域配置也有完全访问权限;但主网站托管在共享主机上,我唯一的访问权限是通过 FTP。

如果不将电子商务应用程序移至共享主机,在此设置中,我们是否有办法通过 example.co.uk/shop 和仅此 URL 访问电子商务网站?我们只希望从子目录进行访问(出于 SEO 原因),因此输入 shop.example.co.uk 域应重定向到 example.co.uk/shop。

我目前正在尝试确定共享主机上是否有 mod_proxy,尽管这似乎不太可能。这是唯一的方法吗?

编辑:感谢到目前为止的所有回答。稍微解释一下理由,这是为一位客户准备的,他希望自己托管主网站,因为它是由另一家公司开发和管理的。

答案1

mod_proxy确实是最可行的解决方案我现在能想到的方法是,如果你想要将这些站点物理分开。基本上,这是一个教科书上的例子RewriteRule[P]旗帜

Given Rule                                      Resulting Substitution
----------------------------------------------  ----------------------------------
^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
                                                via internal proxy

作为理查德提到,合并将这两个站点物理上连接在一起可以避免在途中产生不必要的问题,从长远来看,这种情况下可能会更好。

虽然我有一些奇怪的想法 - 如果mod_proxy支持是一个问题,而你无法在共享主机上对此做任何事情,那么为什么不切换角色呢?

让我们让你的电子商务服务器提供所有内容的主服务器例子.co.uk通过代理共享主机(现在使用其他虚拟域名 - 例如网站.example.co.uk) 和例如.co.uk/shop直接。然后重定向所有非代理流量到达网站.example.co.uk例子.co.uk

但问题仍然存在——为什么要这么做?如果你要这么做,那么只需将整个网站移到电子商务服务器是最合理的。特别是在你可能遇到一些资源限制的情况下电子商务服务器。再加上给代理增加一些延迟,这一切似乎真的没有必要。我能想到的唯一有用的情况是,如果你在共享主机上设置了一些非常专用的环境/工具链,而这些环境/工具链很难在你当前的电子商务服务器。但说实话,我怀疑事实并非如此。

请详细说明一下您将这些网站分开的理由。也许我们可以找到更好的解决方案来满足您的根本需求。

答案2

如果你准备好忍受修改 magento 安装的痛苦,那么你可以这样做

您必须检查 magento 配置/数据库,并将 shop.example.com 的任何引用更新为 example.com/shop(如果您想使用来自 shop.example.com 的 301 重定向,则必须执行此操作)

这样,您就可以将其移动到子目录中,然后将您的主站点移动到主目录中并导入所有站点(如果您不能反向代理,您将必须这样做,我怀疑共享主机不会为您做到这一点)

完成所有操作后,您只需创建从 shop.example.com 到 example.com/shop 的标准 301 重定向即可

另外不要忘记,除非您有通配符 SSL 或域名和子域名的 SSL,否则您将需要一个新的 SSL 证书

答案3

不幸的是,没有简单的方法可以实现这一点,domain.com/shop 方法假定 /shop 是本地文件夹而不是远程文件夹。您可以使用多种 .htaccess 方法来重定向客户端,或屏蔽 URL,但这很可能会在搜索引擎优化方面给您带来更多问题。您不能将两个服务器合并在一起以使用所需的 URL 格式有什么特别的原因吗?

如果两台服务器位于同一网络中,您可以考虑在它们之间建立 iscsi/nfs 连接,从而允许远程文件夹成为“本地”文件夹(符号链接)。

答案4

如果你mod_proxy的共享主机上有可用资源,那么mod_rewrite你可以使用类似下面的命令:

RewriteEngine On
RewriteRule ^shop/(.*)$ http://shop.example.co.uk/$1 [P]

[P]是需要的代理标志mod_proxy,它应该允许您的电子商务网站按原样运行(我不熟悉 Magento),因为获取该服务器的请求应该与以前相同。

但这并不妨碍访问http://shop.example.co.uk直接地,您可能也想解决这个问题。

希望这有帮助。

相关内容