如何禁止国内同行访问你的英文网站?屏蔽国外IP访问网站
时间:2019-05-04 00:00 来源:料网 点击:次
而没有实际需求,估计是看不下去的,什么乱七八糟的代码哈哈哈!
特点:IP屏蔽 + 浏览器语言识别 + Cookie访问权限
…… ……
这两种屏蔽访问的方式,即使是第一种方式(GEO IP),WordPress 插件里也很多都是付费插件才有。比如说 Wordfence,付费版才提供这个功能。而第二种按浏览器语言或操作系统语言的方式,WordPress 还没有任何相应的插件。
当然,像我这种有一定基础的业余Coder来说,不那么喜欢用插件,还是喜欢直接上代码。无论哪一种方式,要用代码实现,都不是太难。但对外贸人来说,要实现还是需要一点点基础和大胆尝试的,起码你得装个文(代)本(码)编辑器吧?记事本之类的还是算了!(常见的文本编辑器,还是推荐 notepad++ 或 sublime text3)
废话不多说,在你的网站当前所用主题的文件夹下,找到 header.php,使用文本编辑器打开。在 <head>之前 加上下面的代码,保存,上传覆盖原 header.php 文件。
一、利用 IP 地址进行判断并屏蔽
假设你要屏蔽国内同行的 IP 访问(同样地,你自己也只能代理方式访问了)。首先你必须有个判断 GEO IP 的模块。在 VPS 上你可以在 nginx 上安装 geo ip 模块,但是安装和使用上还是麻烦了点。并且,如果你用的是虚拟主机,那就无法自己随心所欲安装扩展模块了。
所以,我们可以借用第三方 IP库的 API 接口。比如淘宝的 IP 库,IP138 的 IP 库等等,判断都非常准确。具体代码:
如果你想对访问流量进行更细一步的分类,比如,如果你想禁止IP来自特定国家并且不是通过谷歌搜索而过来的网站访问,那么你还可以加上进一步的判断条件。
上面的代码更新如下:
不过我个人不推荐再去判断来路 URL。
上一个代码版本,实现基本目的就够了。而判断来路URL进行过滤的这一步,如果你条件的逻辑本身不够合理,也容易让同行进入。比如,既然禁止国内同行访问,那就一律针对国内IP限制访问,管他们是从百度还是谷歌,还是直接输入网址过来的呢。
二、利用访问者的浏览器语言类型进行判断并屏蔽
关于方式二,我认为根据浏览者的浏览器语言编码来判断已经足够,所以这里不必再去研究判断访客的操作系统语言的方法了。
每个浏览器都会有个语言编码,如中文最常见的是 zh 或 zh-CN。
利用访问者的浏览器语言类型进行判断并屏蔽:
但是,语言编码前2位是 zh 的包含多个国家或地区,比如新加坡、澳门、香港、台湾。
zh 中文
zh-CN 中文(简体)
zh-HK 中文(香港)
zh-MO 中文(澳门)
zh-SG 中文(新加坡)
zh-TW 中文(繁体)
所以如果你要排除这些情况,可以再做一个 if 判断。稍作修改:
OK,搞定!这样就不会“误伤”其他中文语言的地区或国家的访问流量了。
当然,如果你想对访问流量进行更细一步的分类,那么还可以像第一种方式代码里调用 $_SERVER[‘HTTP_REFERER’] 的变量,对来路的 URL 进行判断。
注意:如果你使用 Avada, Betheme 等主题,请放到 <head> 的上面。如果不行,放到 <!DOCTYPE html> 上面即可:
Avada 主题(放 <head> 上面):
如果不生效,放 <!DOCTYPE html> 的上面
同样,Betheme 主题(放 <head> 上面)
如果不生效,放 <!DOCTYPE html> 的上面
以上两种方式在 chrome, firefox 以及 sougou 浏览器测试下,一切正常。
三、一些稍微高级点的用法
1)、可不可以两种方式结合起来?of course,why not!? 代码都扔到 <head> 之前即可,不过这样的话你可能用了代理也访问不了自己的网站了,呵呵。那怎么办呢?下文会介绍方法。
2)、上面的两种方式,把屏蔽的访问转向百度了,这多少有点刻意跳转的意思,容易引人怀疑。要弄得自然点的话,你可以转向你网站下的403系统错误页,或者做个简单的HTML静态页面,提示 website under construction,然后 FTP上传到你的主机上去,然后在上面屏蔽代码中,把百度首页的网址改成此 HTML页面的网址即可。
效果演示:https://www.liaosam.com/new.html
怎么做个最简单的html静态页面?额,好吧,很多外贸人的确没有基础,直接给个代码吧,或者你查看上面演示页面的源代码也可以。
在 Notepad++ 中文件-新建,粘贴代码,然后另存为,选择类型:Hyper Text Markup Language File (*html, *htm, *shtml…),起名 new。
把 new.html 文件上传到WP网站根目录下(不是WP主题根目录),然后浏览器上尝试访问 https://www.abc.com/new.html,访问OK正常的话,就可以在上面两种屏蔽模式的代码里用这个地址,替换掉百度首页地址了。
3)、这种分流方式也可以用在 marketing 上,把不同地区流量的潜在客户,导到不同的 landing page 上。或者你玩多站点,你也可以设置导流。
四、方式二太暴力,网站站长也无法访问了,怎么办?
解决方案一、先访问一个添加Cookie的页面,再验证cookie的值,不符合条件的,屏蔽。符合 Cookie 的,通行。
站长在访问网站前,先访问一个任何人都不知道的页面,获取浏览器特定的cookie,相当于获取通行证。
4.1)、在网站 根目录下,放一个 php 文件。取名 getcookie.php,或 letmein.php,或任何你觉得好记的名字。为了安全起见,你最好自己取个名字,不要用我示范的文件名。
4.2)、在 主题文件夹下,header.php 文件的 <head> 前放下面的代码
(注意:如果你使用 Avada, Betheme 等主题,如果放 <head> 上面不行,放到 <!DOCTYPE html> 上面即可)
注意:两部分代码的对应关系我用红色字体标注好了。关于这个cookie值authorized,你也可以改成别的。如 yes, noproblem, iamgood666 等等。
一般同行来访问,没有正确的cookie值,是进不去的。而你要进去,先访问你网站根目录下的 getcookie.php 或 letmein.php 文件即可。
访问地址:https://www.yourdomain.com/getcookie.php
前面提醒过了,你最好取一个不一样的php文件名,这个网站根目录下的文件地址只有你知道。访问它,从它那里获取 cookie,然后再跳转或者你手动访问网站,就OK了!
这就解决了方式二的浏览器语言编码通杀的问题。
解决方案二、在Chrome设置里修改浏览器内置语言加了方式二的代码,站长也打不开了。怎么办?打开 Chrome 浏览器的设置,点击菜单 – 设置(Settings) – 高级 – 语言,然后把英语移到顶部。
这样,判断条件里的 $_SERVER[‘HTTP_ACCEPT_LANGUAGE 就改变成你所设置的语言版本了。这时你就可以访问了!
总结:
原文转自:https://www.liaosam.com/how-to-prevent-visiting-from-your-domestic-competitors.html
(责任编辑:admin) |