570
文章
·
29275
阅读
570
文章
·
29275
阅读

有110人阅读过 自建短链服务
发布于2024/01/23 更新于2024/01/23
[ 教程仅保证更新时有效,请自行测试。]

此办法不算成熟,适合轻度使用,请谨慎考虑。

原理,

获取输入框中的地址,对非英文字符进行url编码后,写入一个index.html文件中,

访问此index文件立即跳转至原地址,

此文件保存在一个随机字符为名的文件夹中,

访问此文件夹,即指向该文件夹中的index.html,

最终实现:域名(:端口)/s/xxxxxxxxx的效果


文件:index.rar


食用方法,解压文件,上传到准备做短链服务的目录内,给http读写权限即可。

代码如下:

<!-- 输入框,用于输入org_url -->
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
    <label for="org_url">输入原链接:</label>
    <input type="text" name="org_url" id="org_url" required>
    <button type="submit">生成短链接</button>
</form>

<?php
// 检查是否提交了表单
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 从表单中获取org_url的值
    $org_url = $_POST['org_url'];
	
	// 获取当前网页的协议
	$protocol = isset($_SERVER['HTTP_X_FORWARDED_PROTO']) ? $_SERVER['HTTP_X_FORWARDED_PROTO'] : (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http');

	// 获取当前网页的域名
	$domain = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST'];
	
    // 生成并显示短链接
    $short_link = createShortLink($org_url);
    echo "" .$protocol . '://' .$domain . '/s/' . $short_link;
}

// 剩余的原始代码(不包括直接输出短链接的部分)
function generateRandomString($length = 8) {
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}

function encodeNonEnglishChars($org_url) {
    $encoded_org_url = '';
    $length = mb_strlen($org_url, 'UTF-8');

    for ($i = 0; $i < $length; $i++) {
        $char = mb_substr($org_url, $i, 1, 'UTF-8');
        if (mb_ord($char, 'UTF-8') > 127) {
            // 对非英文字符进行urlencode
            $encoded_org_url .= rawurlencode($char);
        } else {
            // 英文字符保持不变
            $encoded_org_url .= $char;
        }
    }

    return $encoded_org_url;
}

function createShortLink($org_url) {
    $short_link = generateRandomString();
    $short_url_dir = 's';
    $short_link_dir = 's/' . $short_link . '/'; // 更新目录结构

    // 创建目录
    if (!file_exists($short_url_dir)) {
        mkdir($short_url_dir, 0777, true);
    }

    // 创建短链目录
    mkdir($short_link_dir, 0777, true);

    // 对org_url进行URL编码(仅对非英文字符)
    $encoded_org_url = encodeNonEnglishChars($org_url);

    // 修改生成的HTML文件
    $html_content = '<html><head><script>window.onload = function() { window.location.href = "' . $encoded_org_url . '"; }</script></head><body></body></html>';

    // 输出生成的HTML内容,用于调试
    //echo $html_content;

    // 将HTML内容写入文件
    file_put_contents($short_link_dir . 'index.html', $html_content);

    return $short_link;
}
?>


文章对你有帮助吗?
  • 一般[0]
  • 很赞[0]
  • 没用[0]
  • 垃圾[0]
  • 无语[0]

继续阅读:

扫一扫,手机浏览手机访问本站