我们服务器上的 PHP 页面上有一个视频链接。当特定用户来自特定区域时(假设来自拉丁美洲)将显示视频链接。但是一旦用户点击链接,我想将用户重定向到禁止的页面。
我可以使用 .htaccess 文件吗?
答案 0 :(得分:1)
要根据特定文件限制访问,请使用以下命令:
示例:强>
<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-pecl-geoip module for PHP。根据您的服务器配置,安装通常是直截了当的。如果您使用 RedHat / CentOS ,只需运行:yum install php-pecl-geoip
。您必须拥有对服务器的root访问权才能安装软件,如果您使用的是共享主机,请让管理员为您执行此操作。
安装完成后,您将获得全新的set of PHP functions。您当前应该使用的是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');
答案 1 :(得分:0)
RewriteCond %{REMOTE_HOST} !^123\.456\.789
RewriteCond %{REQUEST_URI} !^/blog/?
RewriteCond %{REQUEST_URI} /(.*)$
RewriteRule (.*) /blog [R=301,L]