当前位置:首页 > 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 转换为短字符串:

方法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 截取

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实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 &l…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…