域名转短域名PHP实现
短域名生成原理
短域名服务通过将长URL映射为短字符串实现,核心步骤包括:生成唯一短码、存储原始URL与短码的对应关系、重定向访问。PHP实现需结合数据库和重定向逻辑。
数据库设计
创建数据表存储映射关系,例如:

CREATE TABLE short_urls (
id INT AUTO_INCREMENT PRIMARY KEY,
long_url VARCHAR(1024) NOT NULL,
short_code VARCHAR(10) NOT NULL UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
短码生成方法
使用Base62编码(0-9, a-z, A-Z)将自增ID转换为短字符串:

function generateShortCode($id) {
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$code = '';
while ($id > 0) {
$code = $chars[$id % 62] . $code;
$id = floor($id / 62);
}
return $code;
}
URL存储逻辑
接收长URL并生成短链:
function createShortUrl($longUrl, $pdo) {
$stmt = $pdo->prepare("INSERT INTO short_urls (long_url, short_code) VALUES (?, ?)");
$shortCode = generateShortCode(rand(1000, 9999)); // 示例使用随机数替代自增ID
$stmt->execute([$longUrl, $shortCode]);
return $shortCode;
}
重定向处理
通过短码查询原始URL并跳转:
$shortCode = $_GET['code'];
$stmt = $pdo->prepare("SELECT long_url FROM short_urls WHERE short_code = ?");
$stmt->execute([$shortCode]);
$url = $stmt->fetchColumn();
if ($url) {
header("Location: $url", true, 301);
exit;
} else {
http_response_code(404);
echo "URL not found";
}
安全性优化
- 验证输入URL格式:
filter_var($url, FILTER_VALIDATE_URL) - 防止短码重复:数据库添加UNIQUE约束
- 限制访问频率:通过IP或Session记录请求次数
扩展功能建议
- 添加过期时间字段自动清理旧记录
- 统计访问次数
- 自定义短码功能
完整实现需结合前端表单和路由配置(如Apache的mod_rewrite或Nginx的rewrite规则)。






