我们服务器的PHP页面上有一个视频链接。当特定用户来自特定地区时,(假设来自拉丁美洲)将显示视频链接。但是一旦用户点击链接,我想将用户重定向到禁止页面。
我可以使用.htaccess文件执行此操作吗?
要根据特定文件限制访问,请使用以下命令:
例子:
<Files wp-login.php>
order deny,allow
deny from all
allow from 139.82.0.0/16
</Files>
为了能够使用地理位置并根据国家/地区使用重定向客户端mod_geoip2 Apache module
:
例子:
GeoIPEnable On
GeoIPDBFile /path/to/GeoIP.dat
# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA$
RewriteRule ^(.*)$ http://www.canada.com$1 [R,L]
# Redirect multiple countries to a single page
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$
RewriteRule ^(.*)$ http://www.northamerica.com$1 [R,L]
另一种解决方案是手动插入将被阻止的 IP 列表。有一个名为HTACCESS Block Country by IP Range的在线服务会为您生成要阻止的 IP 列表。
例子:
# BLOCK COUNTRY BY IP RANGE
# IncrediBILL's HTACCESS Tools
# http://incredibill.me
<Limit GET POST HEAD>
order allow,deny
#
# Block from BRAZIL (BR)
#
deny from 139.82.0.0/16
deny from 143.54.0.0/16
deny from 143.106.0.0/16
deny from 143.107.0.0/16
deny from 143.108.0.0/16
deny from 146.134.0.0/16
deny from 146.164.0.0/16
deny from 147.65.0.0/16
deny from 150.161.0.0/16
deny from 150.162.0.0/16
deny from 150.163.0.0/16
对您来说,另一种可能且最合适的解决方案是使用PHP geoip module
,因为您想限制用户对页面某些部分的访问,而使用PHP会更好。
首先,为 PHP 安装php-pecl-geoip模块。根据您的服务器配置,安装通常很简单。如果您使用的是RedHat/CentOS,只需运行:yum install php-pecl-geoip
. 您必须具有对服务器的 root 访问权限才能安装软件,如果您使用共享主机,请让您的管理员为您执行此操作。
安装后,您将拥有一套全新的 PHP 函数供您使用。你现在应该使用的是geoip_continent_code_by_name()
,因为你要求阻止来自南美的所有用户。
将其应用于您的示例很容易:
if ( geoip_continent_code_by_name( $_SERVER['REMOTE_ADDR'] ) == 'SA' ) {
echo '<a href="#">YouTube Video Example: This video is not available for South America.</a>';
} else {
echo '<a href="http://www.youtube.com/watch?v=videoCode">YouTube Video Example</a>';
}
要在您的服务器上对其进行测试,您只需替换$_SERVER['REMOTE_ADDR']
为属于巴西的 IP 之一,例如:geoip_continent_code_by_name('146.164.22.1');
RewriteCond %{REMOTE_HOST} !^123\.456\.789
RewriteCond %{REQUEST_URI} !^/blog/?
RewriteCond %{REQUEST_URI} /(.*)$
RewriteRule (.*) /blog [R=301,L]