我的服务器上安装了基于PHP的Youtube克隆系统。
在几个国家/地区使用相同的系统。假设我有3个域都指向同一个系统:
www.site.hr
www.site.ba
www.site.rs
他们全部重定向到名为 www.site.tv
的某个网站这3个国家/地区的语言非常相似,因此为每个国家/地区设置相同的系统是有意义的,但在系统内部显示与该特定国家/地区相关的横幅将会很棒。
最好的方法是什么,甚至是可能的?
我的想法是:
1)查找每个访问者IP并检查来自哪个国家或者
2)创建3个子域hr.site.tv,ba.site.tv和rs.site.tv,这些都是
单独的系统,但共享相同的数据库...
我知道第一个想法是有缺陷的,第二个想法是合理的。 你有更好的主意吗?
答案 0 :(得分:1)
IP地址查找和GeoIP不可靠。嗅探$ _SERVER ['HTTP_ACCEPT_LANGUAGE']将没有多大帮助,因为他们可能会返回相同的语言,或者如果用户更喜欢英语,则根本不回复。
如果这些是您的内部横幅,建议您使用同一域中的子域或不同的URL路径。第三方广告提供商可能拥有自己的市场定位算法。
答案 1 :(得分:1)
如果您不需要强大的系统但只添加为某些(大多数)用户设置横幅的可能性,您可以使用这个简单的解决方案:
www.site.hr redirects to www.site.tv?lang=hr
www.site.ba redirects to www.site.tv?lang=ba
www.site.rs redirects to www.site.tv?lang=rs
然后将lang参数存储在$_SESSION
中,并在人们不断访问内部页面时使用它来显示相关的横幅。
当会话中不存在该参数时(例如,对于机器人),您需要具有默认行为。
你将获得很少重复内容的好处,并且现有代码几乎没有变化(我想)。
答案 2 :(得分:0)
你的想法1)可能适用于大多数情况,但有时候用户会根据他们连接到互联网的方式得到错误的用户,并且会给搜索引擎带来问题,你可能想要将这三个网站编入索引。< / p>
2)由于“所有独立系统”部分而存在问题。保持三个独立的代码库基本上做同样的事情是浪费精力,如果必须适合所有数据库结构,那么对数据库结构进行更改将会很棘手。
更好的选择是只拥有一个系统,但将其连接到所有三个域,并在其中放置一些逻辑以显示每个国家/地区的相应横幅。您可以将Web服务器配置为将三个域名视为别名,并将来自所有域名的请求发送到同一PHP应用程序。在PHP中,您可以获取客户端请求的站点名称$_SERVER['SERVER_NAME']
。您可能正在使用框架或PHP库,它提供了一种在您的站点上具有特定于域名的内容的不同方式。
客户端可能会发送您不期望的主机名,因此请确保您拥有允许主机名的白名单,并且如果请求收到无法识别的内容,您的服务器将拒绝该请求。