欢迎光临
IDC人自己的网站

被屏蔽或限制访问的美国州(截至 2025 年)

composer require geoip2/geoip2

被屏蔽或限制访问的美国州(截至 2025 年)

以下州因年龄验证法律而被网站屏蔽或限制访问:

  • 佛罗里达州(Florida)
  • 南卡罗来纳州(South Carolina)
  • 阿拉巴马州(Alabama)
  • 阿肯色州(Arkansas)
  • 爱达荷州(Idaho)
  • 印第安纳州(Indiana)
  • 堪萨斯州(Kansas)
  • 肯塔基州(Kentucky)
  • 密西西比州(Mississippi)
  • 蒙大拿州(Montana)
  • 内布拉斯加州(Nebraska)
  • 北卡罗来纳州(North Carolina)
  • 俄克拉荷马州(Oklahoma)
  • 得克萨斯州(Texas)
  • 犹他州(Utah)
  • 弗吉尼亚州(Virginia)

此外,乔治亚州(Georgia)的相关法律将在 2025 年 7 月生效,可能也将被屏蔽

前提条件

  1. 安装 MaxMind PHP SDK:bashcomposer require geoip2/geoip2
  2. 下载 GeoLite2-City.mmdb 数据库:
    • 注册并下载:https://dev.maxmind.com/geoip/geolite2-free-geolocation-data
    • 放置在服务器路径,例如 /path/to/GeoLite2-City.mmdb

🧩 PHP 示例代码

php

<?php
require_once 'vendor/autoload.php';

use GeoIp2\Database\Reader;

// 初始化数据库读取器
$reader = new Reader('/path/to/GeoLite2-City.mmdb');

// 获取用户 IP 地址(注意:生产环境需处理代理或 CDN)
$ipAddress = $_SERVER['REMOTE_ADDR'];

try {
    // 查询地理信息
    $record = $reader->city($ipAddress);

    // 获取州名(如 Texas、Utah)
    $stateName = $record->subdivisions[0]->name ?? '';

    // 定义需要屏蔽的州列表
    $blockedStates = [
        'Texas', 'Utah', 'Virginia', 'Mississippi', 'Arkansas', 'Montana',
        'North Carolina', 'South Carolina', 'Alabama', 'Florida', 'Indiana',
        'Kentucky', 'Oklahoma', 'Idaho', 'Kansas', 'Nebraska', 'Georgia'
    ];

    // 判断是否需要屏蔽
    if (in_array($stateName, $blockedStates)) {
        // 返回 403 禁止访问
        header('HTTP/1.1 403 Forbidden');
        echo "Access denied due to local regulations in {$stateName}.";
        exit;
    }

} catch (Exception $e) {
    // 如果 IP 查询失败,可选择允许或默认屏蔽
    error_log("GeoIP lookup failed: " . $e->getMessage());
    // 可选:默认允许或屏蔽
    // exit;
}

// 正常页面逻辑继续执行
echo "Welcome to the site!";
?>

🧩 完整 PHP 示例代码

<?php
require_once 'vendor/autoload.php';

use GeoIp2\Database\Reader;

// 初始化数据库读取器
$reader = new Reader('/path/to/GeoLite2-City.mmdb');

// 获取用户 IP 地址(建议处理代理)
$ipAddress = $_SERVER['REMOTE_ADDR'] ?? '';

// 获取当前时间
$timestamp = date('Y-m-d H:i:s');

// 查询地理信息
try {
    $record = $reader->city($ipAddress);
    $stateName = $record->subdivisions[0]->name ?? '';

    // 定义需要屏蔽的州列表
    $blockedStates = [
        'Texas', 'Utah', 'Virginia', 'Mississippi', 'Arkansas', 'Montana',
        'North Carolina', 'South Carolina', 'Alabama', 'Florida', 'Indiana',
        'Kentucky', 'Oklahoma', 'Idaho', 'Kansas', 'Nebraska', 'Georgia'
    ];

    // 判断是否需要屏蔽
    if (in_array($stateName, $blockedStates)) {
        // 记录日志
        $logEntry = "[{$timestamp}] Blocked IP: {$ipAddress} from {$stateName}\n";
        file_put_contents(__DIR__ . '/blocked_access.log', $logEntry, FILE_APPEND);

        // 展示提示页面
        echo "<!DOCTYPE html>
        <html lang='en'>
        <head>
            <meta charset='UTF-8'>
            <title>Access Restricted</title>
            <style>
                body { font-family: Arial, sans-serif; background-color: #f8f8f8; text-align: center; padding: 50px; }
                .container { background: #fff; padding: 30px; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.1); display: inline-block; }
                h1 { color: #c00; }
                p { color: #333; }
            </style>
        </head>
        <body>
            <div class='container'>
                <h1>Access Restricted</h1>
                <p>Due to local regulations in <strong>{$stateName}</strong>, access to this content is not permitted.</p>
                <p>If you believe this is an error, please contact our compliance team.</p>
            </div>
        </body>
        </html>";
        exit;
    }

} catch (Exception $e) {
    error_log("GeoIP lookup failed: " . $e->getMessage());
    // 可选:默认允许或屏蔽
    // exit;
}

// 正常页面逻辑继续执行
echo "Welcome to the site!";
?>

📁 文件说明
GeoLite2-City.mmdb:MaxMind 地理数据库文件

blocked_access.log:自动生成的日志文件,记录被屏蔽的访问尝试

提示页面:HTML 样式友好,适合合规说明或用户申诉入口
赞(0)
未经允许不得转载:IDC头条 » 被屏蔽或限制访问的美国州(截至 2025 年)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

全国首家专注IDC行业的垂直自媒体

我要投稿互帮互助