- redirects 表 + UrlRedirector:go_url() 站外链接改写为 /go/{hash}(确定性 hash、同 URL 复用、并发安全、缓存)
- /go/{hash} 302 跳转 + 点击计数 + 最后点击时间;停用状态 410(二次拦截);后台「外链中转」资源可查看点击量/启停/删除
- 接入点:正文外链(渲染器统一改写)、评论正文自动链接(comment_body)、评论作者网址、友链(侧边栏+友链页);站内/相对/mailto/tel/锚点不中转
- 测试 6 个(改写/计数/拦截/复用/渲染/评论正文);README 补充
30 lines
535 B
PHP
30 lines
535 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class Redirect extends Model
|
|
{
|
|
protected $fillable = [
|
|
'hash', 'target_url', 'clicks', 'status', 'last_clicked_at',
|
|
];
|
|
|
|
protected $casts = [
|
|
'last_clicked_at' => 'datetime',
|
|
];
|
|
|
|
public function isActive(): bool
|
|
{
|
|
return $this->status === 'active';
|
|
}
|
|
|
|
public function hit(): void
|
|
{
|
|
$this->increment('clicks');
|
|
$this->update(['last_clicked_at' => now()]);
|
|
}
|
|
}
|