域名转短域名PHP实现
短域名生成原理
短域名服务通过将长URL映射为短字符串实现,通常基于以下技术:

- 哈希算法(如MD5、CRC32)生成固定长度字符串后截取部分字符
- 自增ID转Base62(数字+大小写字母)编码缩短长度
- 数据库存储映射关系,确保短码唯一性
方法一:哈希截取法
function generateShortUrl($longUrl) {
$hash = md5($longUrl . uniqid());
return substr($hash, 0, 6); // 截取前6位
}
// 使用示例
$shortCode = generateShortUrl('https://example.com/very/long/url');
方法二:Base62编码法
依赖自增ID和字符映射表:
function idToShortCode($id) {
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$code = '';
while ($id > 0) {
$code = $chars[$id % 62] . $code;
$id = floor($id / 62);
}
return $code;
}
// 假设从数据库获取最新ID为12345
$shortCode = idToShortCode(12345); // 输出"3d7"
数据库设计参考
需存储原始URL与短码的映射关系:
CREATE TABLE short_urls (
id INT AUTO_INCREMENT PRIMARY KEY,
long_url VARCHAR(2048) NOT NULL,
short_code VARCHAR(10) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
完整实现步骤
- 用户提交长URL时,检查是否已存在对应短码
- 若不存在,生成新短码并存入数据库
- 访问短域名时查询数据库跳转到原始URL
优化建议
- 添加过期时间字段控制短链有效期
- 使用缓存(如Redis)加速短码查询
- 添加防冲突机制,哈希冲突时重试生成
安全性注意事项
- 避免短码被暴力遍历,可加入随机盐值
- 对输入URL进行过滤,防止XSS攻击
通过上述方法可实现基础短链服务,实际部署需考虑性能与扩展性。






