由于涉及到多重缓存,所以技术性偏强,没有一定技术基础的外贸人就不要过多研究了。
关于缓存,本文已经尽量详细解释了,如果不成功,我也不想过多去解答。
实际上,为了实现这个功能,给自己访问网站也会带来一些不便。所以再次提醒一下,如果不是有着强烈的需求,建议别折腾。
特点:IP屏蔽+浏览器语言识别+Cookie访问权限
你会选择禁止他们访问吗?这是一个让人心烦的问题。
实际上,除了这些考虑因素之外,还有竞争性方面的考虑。
我的外贸课程有一定比例的学员是外贸SOHO和外贸刚起步的startup公司,刚刚开始学习并尝试自建站,总是会时不时问到:如何能屏蔽国内同行对其网站的访问?屏蔽国内同行,目的很简单,只是为了信息保护,防止同行的跟风copy。
Brian也曾担心过是否会有同行有意或者无意中看到他们的英文网站,所以一度想过,是否要做一些访客流量的限制。但是由于他对网站技术一窍不通,缺乏必要的基础,最后也不知道如何去弄,最终也忽视了,没有做任何的防范措施。
谁知道,才过了一个多月后,有其他同行模仿做了类似的款式,并且放到阿里巴巴上橱窗产品里去了!
这位Brian学员非常怀疑是该同行访问了他们的英文网站,抄袭了他们的设计和功能。而他还没来得及去申请专利,所以觉得特别头疼和心塞!!
最后,他来问我,是否有办法能屏蔽国内同行访问?
关于自己设计和研发的新款,被同行copy的这件事,真正的原因是否真的如他所说,因为被同行看了网站而导致的,还是另有其它什么原因,我不得而知。毕竟商场如战场,什么事都可能发生。
但也只是说说思路,并没有去尝试如何实现。而这位学员的事情发生后,我花了几个小时写代码和测试,最终发现可以实现!
通常屏蔽特定国家流量访问,我们常见的一些WP插件工具,方法主要是第一种:根据IP地址地理位置IP(GEOIP)进行国家地区地判断,进行对应地屏蔽。显然,这种方式效果不太好。而另一种方式,识别判断访问者的浏览器内置的语言编码,或者操作系统的语言,就可以差不多解决套个代理换个国外IP就可以访问的问题了。
这两种屏蔽访问的方式,即使是第一种方式(GEOIP),WordPress插件里也很多都是付费版插件里才提供这个功能。而第二种按浏览器语言或操作系统语言的方式,WordPress还没有任何相应的插件。
当然,像我这种有一定基础的业余Coder来说,不那么喜欢用插件,还是喜欢直接上代码。无论哪一种方式,要用代码实现,都不是太难。但对外贸人来说,要实现还是需要一点点基础和大胆尝试的,起码你得装个文(代)本(码)编辑器吧?记事本之类的还是算了!(常见的文本编辑器,还是推荐notepad++或sublimetext3)
废话不多说,在你的网站当前所用主题的文件夹下,找到header.php,使用文本编辑器打开。在
之前加上下面的代码,保存,上传覆盖原header.php文件。假设你要屏蔽国内同行的IP访问(同样地,你自己也只能代理方式访问了)。首先你必须有个判断GEOIP的模块。在VPS上你可以在nginx上安装geoip模块,但是安装和使用上还是麻烦了点。并且,如果你用的是虚拟主机,那就无法自己随心所欲安装扩展模块了。
所以,我们可以借用第三方IP库的API接口。比如淘宝的IP库,IP138的IP库等等,判断都非常准确。具体代码:
另外,为了防止国外调用ip.taobao.com的判断国家地区的getIpInfo.php文件速度慢,最好在上面代码下面再加一行dns预解析代码,加快载入文件。
如果你是SiteGround虚拟主机的用户,你需要在WP后台点击一下顶部的PurgeSGCache按钮来清理缓存。前提是,你之前在Cpanel里WordPressTools下–SuperCacher里面,开启了LEVEL1,LEVEL2和LEVEL3的缓存功能(开启之后,控制是用SGOptimizer控制)。
如果你安装过任何缓存类的插件,也注意清理一下缓存。因为你的首页会被你的主机缓存,甚至有些缓存插件会利用浏览器缓存。
关于方式二,我认为根据浏览者的浏览器语言编码来判断已经足够,所以这里不必再去研究判断访客的操作系统语言的方法了。
每个浏览器都会有个语言编码,如中文最常见的是zh或zh-CN。
利用访问者的浏览器语言类型进行判断并屏蔽:
所以如果你要排除这些情况,可以再做一个if判断。稍作修改:
注意:如果你使用Avada,Betheme等主题,请放到
的上面。以上两种方式在chrome,firefox以及sougou浏览器测试下,一切正常。
1)可不可以两种方式结合起来?ofcourse,whynot!代码都扔到
之前即可,不过这样的话你可能用了代理也访问不了自己的网站了,呵呵。那怎么办呢?下文会介绍方法。2)上面的两种方式,把屏蔽的访问转向百度了,这多少有点刻意跳转的意思,容易引人怀疑。
3)这种分流方式也可以用在marketing上,把不同地区流量的潜在客户,导到不同的landingpage上。或者你玩多站点,你也可以设置导流。
站长在访问网站前,先访问一个任何人都不知道的页面,获取浏览器特定的cookie,相当于获取通行证。
4.1)在网站根目录下(如果是虚拟主机,则网站根目录大多是在public_html目录下;如果是VPS则大多是在/home/wwwroot/www.abc.com/下),放一个php文件。
取名getcookie.php,或letmein.php,或任何你觉得好记的名字。为了安全起见,你最好自己取个名字,不要用我示范的文件名。
代码如下:(请自行修改网站网址,把域名换成你的)
下载完js.cookie.js文件,上传到你的网站根目录下。跟getcookie.php一个目录下。
当然你还可以再检查一下:F12调出审查元素工具窗口,点击最上面一行里的Application。然后点击下方左侧的Cookie,如果看到有一行名为WebsiteOwner的Cookie记录,则说明赋予Cookie成功。
此时再访问自己的网站,即可正常访问。
2)在主题文件夹下,header.php文件的
前放下面的代码(注意:如果你使用Avada,Betheme等主题,如果放
上面不行,放到上面即可)一般同行来访问,没有正确的cookie值,是进不去的。而你要进去,先访问你网站根目录下的getcookie.php或letmein.php文件即可。
这就解决了方式二的浏览器语言编码通杀的问题。
思维导图来小结吧:
有人会说了,怎么结合起来用呢?
先从②和③开始检查:
1)你WP后台有没有安装任何缓存类的插件?有:清理缓存(flushcache/purgecache)。没有:无需任何操作。建议清理完缓存后,先停用缓存插件。因为你要反复调试屏蔽代码。等确定添加的功能代码运行正常后,再重新启用缓存插件。
2)你没有清理本地电脑上浏览器的缓存?为了提高网页访问速度,有些缓存插件会使用浏览器缓存。原理是:第一次访问网页时就在本地浏览器缓存中生成该网站的页面,让你从第二次访问开始,之后的每次访问直接从你浏览器缓存里获取,而不是去网站获取最新的页面。所以你需要把你Chrome浏览器的缓存也手动清理一下,Chrome浏览器右上角菜单按钮-更多工具-清理浏览数据,选择“缓存的图片和文件”。如果你想清除cookie,也一并勾上,点击清除数据按钮。
上面这两类缓存都容易清理。第一类虚拟主机自带的缓存,要稍微复杂一点点。
3)你的虚拟主机是否自动开启了自带的缓存?常见的外贸人用的虚拟主机是SiteGround或Bluehost。前者有个SuperCacher缓存系统,后者有个EnduranceCache系统。
***如果用的是SiteGround虚拟主机,SiteGround应该在网站后台自带安装了管理SuperCacher的WordPress插件:SGOptimizer。点击进去,出现配置界面。在SuperCacherSettings下,DynamicCaching下面有个ManualCachePurge(手动清理缓存),点击清理一下。
然后第二项:EnvironmentOptimization之下,先不要开启BrowserCaching,GZIPCompression可以开启。其他的不用管。第三个选项卡下,注意其它都可以勾选,MinifyJavaScriptFiles这一项不要勾选,JS文件代码的压缩,容易出问题。
然后点击顶部的PurgeSGCache。这样即可清理掉所有SiteGround生成的缓存。
***如果你用的是Bluehost虚拟主机,先在WP后台EndurancePageCache这里,清理一下PageCache。点击PurgeCache清理缓存的按钮
清理完了PageCache,你再看上面那里BrowserCache那里,它没有任何清理按钮,是因为这种缓存插件让你的浏览器第一次访问的时候也在浏览器里生成了缓存。所以你需要清理浏览器中的缓存。
然后,在WP后台,Setting里面,会有个EnduranceCache-CacheLevel的选项,选择Off。
然后在Bluehost后台,Performace这里,勾选CachingOff,这样就顺利关闭了Bluehost自带的缓存。
打开Chrome浏览器的设置,点击菜单–设置(Settings)–高级–语言,然后把英语移到顶部。
通过这种办法,可以修改浏览器语言,进而影响HTTP_ACCEPT_LANGUAGE的判断。