当前位置:首页 > PHP

php实现短域名

2026-02-16 12:41:47PHP

实现短域名服务的 PHP 方案

短域名服务是将长 URL 转换为短字符串(如 example.com/abc123)的技术。以下是实现短域名的核心方法和步骤:

数据库设计

创建数据库表存储原始 URL 和短码的映射关系:

CREATE TABLE short_urls (
    id INT AUTO_INCREMENT PRIMARY KEY,
    original_url VARCHAR(2048) NOT NULL,
    short_code VARCHAR(10) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

短码生成算法

使用哈希或自增 ID 转换为短字符串:

php实现短域名

方法1:Base62 编码(推荐)

function generateShortCode($url) {
    $hash = crc32($url . microtime());
    $base62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $shortCode = '';
    while ($hash > 0) {
        $shortCode = $base62[$hash % 62] . $shortCode;
        $hash = (int)($hash / 62);
    }
    return substr($shortCode, 0, 6);
}

方法2:MD5 截取

php实现短域名

function generateShortCode($url) {
    return substr(md5($url . uniqid()), 0, 6);
}

URL 缩短逻辑

处理原始 URL 并存储:

function shortenUrl($originalUrl, $pdo) {
    // 验证 URL
    if (!filter_var($originalUrl, FILTER_VALIDATE_URL)) {
        throw new Exception("Invalid URL");
    }

    // 生成短码
    $shortCode = generateShortCode($originalUrl);

    // 存储到数据库
    $stmt = $pdo->prepare("INSERT INTO short_urls (original_url, short_code) VALUES (?, ?)");
    $stmt->execute([$originalUrl, $shortCode]);

    return 'https://yourdomain.com/' . $shortCode;
}

重定向逻辑

通过短码跳转到原始 URL:

function redirectToOriginal($shortCode, $pdo) {
    $stmt = $pdo->prepare("SELECT original_url FROM short_urls WHERE short_code = ?");
    $stmt->execute([$shortCode]);
    $result = $stmt->fetch();

    if ($result) {
        header("Location: " . $result['original_url'], true, 301);
        exit;
    } else {
        header("HTTP/1.0 404 Not Found");
        echo "URL not found";
    }
}

路由处理

在入口文件(如 index.php)中添加路由:

$request = $_SERVER['REQUEST_URI'];
$path = parse_url($request, PHP_URL_PATH);
$shortCode = ltrim($path, '/');

if ($_SERVER['REQUEST_METHOD'] === 'POST' && $path === '/shorten') {
    // 处理缩短请求
    $originalUrl = $_POST['url'] ?? '';
    echo shortenUrl($originalUrl, $pdo);
} elseif (!empty($shortCode) && strlen($shortCode) <= 10) {
    // 处理重定向
    redirectToOriginal($shortCode, $pdo);
}

性能优化建议

  • 使用缓存(如 Redis)存储热门短码映射
  • 添加布隆过滤器防止重复生成相同 URL 的短码
  • 实现过期机制自动清理长期未使用的短链接
  • 对频繁访问的短链接启用 CDN 加速

安全注意事项

  • 验证输入 URL 防止 XSS 攻击
  • 限制短码生成频率防止滥用
  • 对敏感域名添加黑名单过滤
  • 使用 HTTPS 保证传输安全

完整实现需要结合具体框架(如 Laravel 或 Symfony)调整数据库和路由部分。对于高并发场景,建议采用分布式 ID 生成器替代自增 ID。

标签: 域名php
分享给朋友:

相关文章

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php 实现https

php 实现https

在 PHP 中实现 HTTPS 确保 PHP 应用通过 HTTPS 协议安全传输数据,可以通过以下几种方式实现: 配置服务器强制 HTTPS 在 Web 服务器(如 Apache 或 Nginx)中…

php实现抽奖程序

php实现抽奖程序

PHP实现抽奖程序 基本抽奖逻辑 创建一个简单的抽奖程序需要定义奖品、中奖概率及随机选择逻辑。以下是一个基础实现示例: <?php // 奖品配置(奖品名称 => 概率) $prizes…

php 实现的n

php 实现的n

以下是关于 PHP 实现 N 的常见需求及解决方案的整理: 生成 N 个随机数 使用 rand() 或 mt_rand() 函数结合循环生成指定数量的随机数: $n = 10; // 生成10…

php商城 设计与实现

php商城 设计与实现

PHP商城设计与实现的关键步骤 需求分析与规划 明确商城类型(B2B/B2C)、目标用户群体及核心功能模块。基础功能需包含用户注册登录、商品展示、购物车、订单管理、支付接口集成、后台管理。扩展功能可考…

php实现无限级分类

php实现无限级分类

无限级分类的实现方法 无限级分类通常用于构建树形结构数据,如商品分类、地区选择等。以下是几种常见的实现方式: 递归实现法 递归是最直观的实现方式,通过函数自身调用来处理子分类: function…