如何使用 Apache 构建 URL 缩短器

使用 Apache HTTP 服务器的 mod_rewrite 功能创建您自己的短链接。
233 位读者喜欢这篇文章。
Image of spider web

You as a Machine. 由 Rikki Endsley 修改。 CC BY-SA 2.0。

很久以前,人们开始在 Twitter 上分享链接。140 个字符的限制意味着 URL 可能会占用一条推文的大部分(或全部)内容,因此人们转向了 URL 缩短器。最终,Twitter 添加了一个内置的 URL 缩短器 (t.co)。

现在字符计数已不再那么重要,但仍然有其他理由缩短链接。首先,缩短服务可以提供分析数据——您可以查看您分享的链接有多受欢迎。它还简化了创建易于记忆的 URL。例如,bit.ly/INtravelhttps://www.in.gov/ai/appfiles/dhs-countyMap/dhsCountyMap.html 容易记住得多。如果您想预先分享一个链接,但尚不知道最终目的地,URL 缩短器也可以派上用场。

像任何技术一样,URL 缩短器并非完全都是积极的。通过掩盖最终目的地,缩短的链接可能被用来将人们定向到恶意或冒犯性内容。但是,如果您谨慎上网,URL 缩短器仍然是一个有用的工具。

我们之前在这个网站上介绍过缩短器,但也许您想要运行一些由文本文件驱动的简单程序。在本文中,我们将展示如何使用 Apache HTTP 服务器的 mod_rewrite 功能来设置您自己的 URL 缩短器。如果您不熟悉 Apache HTTP 服务器,请查看 David Both 关于安装和配置它的文章。

创建 VirtualHost

在本教程中,我假设您购买了一个很酷的域名,您将专门用于 URL 缩短器。例如,我的网站是 funnelfiasco.com,所以我购买了 funnelfias.co 用于我的 URL 缩短器(好吧,它不算很短,但它满足了我的虚荣心)。如果您不打算将缩短器作为单独的域名运行,请跳到下一节。

第一步是设置将用于 URL 缩短器的 VirtualHost。有关 VirtualHost 的更多信息,请参阅 David Both 的文章。此设置只需要几行基本代码

    <VirtualHost *:80>
        ServerName funnelfias.co
    </VirtualHost>

创建重写规则

此服务使用 HTTPD 的重写引擎来重写 URL。如果您在上一节中创建了 VirtualHost,则以下配置将进入您的 VirtualHost 部分。否则,它将进入您的服务器的 VirtualHost 或主 HTTPD 配置中。

    RewriteEngine on
    RewriteMap shortlinks txt:/data/web/shortlink/links.txt
    RewriteRule ^/(.+)$ ${shortlinks:$1} [R=temp,L]

第一行简单地启用了重写引擎。第二行从文本文件构建短链接的映射。上面的路径只是一个示例;您需要使用系统上的有效路径(确保运行 HTTPD 的用户帐户可读取该路径)。最后一行重写 URL。在此示例中,它获取任何字符并在重写映射中查找它们。您可能希望您的重写规则在开头使用特定的字符串。例如,如果您希望所有缩短的链接都采用 “slX” 的形式(其中 X 是一个数字),则需要将上面的 (.+) 替换为 (sl\d+)

我在这里使用了临时 (HTTP 302) 重定向。这允许我稍后更新目标 URL。如果您希望短链接始终指向同一目标,则可以使用永久 (HTTP 301) 重定向。将第三行中的 temp 替换为 permanent

构建您的映射

编辑您在配置的 RewriteMap 行中指定的文件。格式是以空格分隔的键值存储。每行放一个链接

    osdc https://open-source.net.cn/users/bcotton
    twitter https://twitter.com/funnelfiasco
    swody1 https://www.spc.noaa.gov/products/outlook/day1otlk.html

重启 HTTPD

最后一步是重启 HTTPD 进程。这可以通过 systemctl restart httpd 或类似的命令完成(命令和守护进程名称可能因发行版而异)。您的链接缩短器现在已启动并运行。当您准备好编辑映射时,您无需重启 Web 服务器。您只需保存文件,Web 服务器就会获取更改。

未来工作

此示例为您提供了一个基本的 URL 缩短器。如果您想开发自己的管理界面作为学习项目,它可以作为一个良好的起点。或者您也可以直接使用它来分享易于记忆的链接到难以记住的 URL。

User profile image.
Ben Cotton 是一名受过训练的气象学家,但天气是一个很棒的爱好。Ben 在红帽公司担任 Fedora 项目经理。他是《开源项目项目管理》一书的作者。在 Twitter (@FunnelFiasco) 或 FunnelFiasco.com 上找到他。

1 条评论

很棒的文章。感谢分享!

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.