![是否可以根据 URL 中的文件夹名称重定向到另一个地理位置不同的服务器?](https://linux22.com/image/554526/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E6%A0%B9%E6%8D%AE%20URL%20%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E5%90%8D%E7%A7%B0%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%9C%B0%E7%90%86%E4%BD%8D%E7%BD%AE%E4%B8%8D%E5%90%8C%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我所寻求的是根据访问者的语言选择将他们引导至地理位置不同的服务器。
我们的 URL 结构如下mydomain.com/en和mydomain.com/th(泰语)。目前所有内容都托管在同一台服务器上。但是,对于选择日语言,我们最好使用位于泰国的服务器为他们提供服务。这样泰国访客的页面加载速度会大大提高。
我的平台是 Apache、Linux、MySQL - 常规的 LAMP 堆栈。那么...是否可以配置 Apache,以便按照我上面所述的方式重定向所有流量?请记住,域名不能更改,也不能使用子域名。它必须采用类似文件夹的格式。
谢谢,
m^e
答案1
如果你可以在事后将人们重定向到本地子域名,那么这将有效:
RewriteEngine on
RewriteRule ^/th(.*)$ http://th.example.com$1 [R,L]
RewriteRule ^/en(.*)$ http://en.example.com$1 [R,L]
不幸的是,鉴于您使用单个主机名运行,这意味着您仅限于 DNS(GeoIP)中的内容,并且无法处理 URL 路径部分的任何内容,因此您无法基于它做出决策。
基本上,鉴于你提供的限制,你完蛋了。向制定规则的人解释,无论他们如何跺脚、撅嘴,你都无法改变互联网物理定律。就我个人而言,我不明白这有什么丑陋的http://th.example.com/
……
答案2
这也许是一个有点碰运气的方法,但可以考虑使用地理位置感知的 DNS 服务器 - 一个建议是地理IPDNSTinyDNS 的一个嵌入式替代分支。
这个想法是,在您的机器上托管一个权威名称服务器,并根据 IP 自动将用户重定向到一个服务器或另一个服务器。用户的机器应该缓存 DNS 请求,以便只偶尔进行一次查找(即不是每次页面请求)。
您可以在两台服务器上同时托管 /en 和 /th 版本,DNS 解决方案会将用户发送到地理位置正确的服务器。用户仍然可以选择他们想要查看的网站版本,并且地理位置是透明的,不会增加延迟(当然,您可以在两台服务器上托管 DNS 以提供后备)。
答案3
通过反向代理服务器将文件夹“/th”别名为泰国服务器的 IP 地址。
顺便说一下,Apache 本身就是反向代理……
更多信息请见此处:http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypassreverse
这将使得
www.example.com/th/hi-there
由 apache 转换为
thai.ip.add.ress/hi-there
它对用户来说是完全透明的,没有重定向或类似的东西。