サーバーの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 のリストを手動で挿入することです。ブロックする IPのリストを生成するHTACCESS Block Country by IP Rangeというオンライン サービスがあります。
例:
# 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 を使用してそれを行う方がはるかに優れているため、 PHPを使用することが最も適切な解決策の 1 つです。geoip module
まず、 PHPの php-pecl-geoipモジュールをインストールします。サーバーの構成にもよりますが、通常、インストールは簡単です。RedHat/CentOSを使用している場合は、次を実行するだけですyum install php-pecl-geoip
。ソフトウェアをインストールするには、サーバーへのルート アクセス権が必要です。共有ホスティングを使用している場合は、管理者に依頼してください。
インストール後、まったく新しい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 の 1 つに置き換えるだけです。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]