我正在用PHP5创建一个应用程序,该应用程序需要存储网站的唯一URL。例如,如果用户输入“ http://www.google.com/”,则在解析后将其存储为“ google.com”在数据库中。基本上,我需要一个一致的URL约定,以便同一站点没有多个条目。
基本上,可以从所有输入的网址中删除“ www”吗?还是应该保留?
尽管区别并不总是很重要,但是www.google.com所指的DNS条目与google.com不同,并且可能会返回不同的数据。例如,您偶尔会在野外看到www2.foo.com,并且出于奇怪的负载平衡原因,foo.com可能会重定向到它。
所以,不好的主意。
保持它。这是两个不同的URL,most站点将其视为相同。唯一的危害是4个字节的数据,因此没有充分的技术理由不存储它。当您在那里时,最好也不丢掉协议(“ http://”)。
当您向最终用户显示该URL时,即当我删除“ http://www”时。
一种方法可能是对站点执行GET操作,并存储收到的任何重定向结果。因此,如果您有一个这样的站点,其中www.stackoverflow.com
重定向到stackoverflow.com
,那么您将只存储一次规范URL。
不要对网站所有者的需求做任何假设;让他们告诉你。
这取决于您所说的“同一站点”。 everything.sitename.com与www.sitename.com属于同一个人。实际上,everything.sitename.com是www.sitename.com的子域大多数时候,
www.sitename.com == sitename.com
但是
blog.sitename.com != sitename.com
您是否真的很难存储,以至于4个字节会耗尽资金?可能不是。它可能看起来像是节省空间的功能,但是一旦您遇到了非www网站没有别名的url,就必须对其进行编码。然后,当您拥有除www之外的其他子域名的网址时,您也必须围绕这些子域名进行编码。
从长远来看,最好将URL保留不变,并将其吸收到原始存储中,除非您要存储数亿个URL。
如果您考虑/关心以下事实,即某些网站/应用程序在www.domain.com与domain.com上提供相同的内容,而有些却不提供,则截断www可能不是一个很好的假设。
如果要在同一域中有几个子域,最好保留它。这可能有助于降低您的请求带宽。
例如:
在这种情况下,当您使用google map时,www站点的cookie不会在每次请求时都发送。
[与http://
不同,在100%的情况下不假定www
。实际上,www
在大多数情况下是foo.com
的子域。部署网站的方法多种多样,以使裸域与www
相同。最受欢迎的两个是DNS别名,其中www
是与顶级域相同的子域,以及HTTP重定向,其中foo.com
是与www.foo.com
不同的虚拟目录,并且具有将所有流量重定向到www.foo.com
的页面。 >
因此,不删除www
是不安全的,因为它是同一URL裸版本的另一个地址。另外,对于使用HTTP重定向方法的网站,您可能还会产生重定向费用,例如http://google.com。