如何用uuid创建一个link?

How to create a link with uuid?

可能是我问错了问题,我只是不知道如何更具体地定义它,抱歉。

我想创建看起来像这样的链接(img 标签中的 src): “bla-bla.com/7e0cfd63-dfc1-4038-a859-ff201dea7b65” 并能够 "decode" 它回来。

原因>

我的链接(img 标签中的 src)现在看起来像这样 "myDomain/somefolder/image1.jpg" ,所以如果用户会将“image1.jpg”更改为“image2.jpg”他会得到一个"direct access"(我认为就是这么叫的)。

所以我想阻止 "direct access",但仍然可以共享链接。

可能是我把问题复杂化了,还有另一种简单的方法可以做到,或者 php 扩展这项工作,请告诉我。

服务器: 赢得 2012 r2 阿帕奇 + php5 + MySQL

P.S.

"7e0cfd63-dfc1-4038-a859-ff201dea7b65" - 这是一个 UUID,对吧? 我在 youtube 视频链接中看到了它。

Google 搜索给出了很多结果 UUID/GUID scripts/technics/how 它有效等等,但我找不到链接的实现...

P.P.S

如果你在 Whosebug 上转到我的个人资料图片:

https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0f?s=48&d=identicon&r=PG&f=1

并将 f 更改为 d 你会得到不同的图像

https://www.gravatar.com/avatar/4141ef5b3f1196534e59f42f76fe0d0d?s=48&d=identicon&r=PG&f=1

这是我不想发生的事情。

我建议使用:

  • mod_rewrite
  • 解码php脚本和
  • 您的数据库将 UUID 映射到路径

mod_rewrite

您使用它来将所有匹配 fake 文件夹的 URL 重定向到解码脚本。将假文件夹命名为 imgs,apache 配置如下(未测试):

RewriteEngine on 
RewriteRule ^/img/(.*)$ get_image.php?uuid= [L]

这应该与 /img/7e0cfd63-dfc1-4038-a859-ff201dea7b65 之类的 URL 匹配并重定向到 /get_image.php?uuid=7e0cfd63-dfc1-4038-a859-ff201dea7b65。 (您现在的图片来源是:src="/img/7e0cfd63-dfc1-4038-a859-ff201dea7b65"

get_image.php

此脚本将使用数据库找出图像的真实位置,该位置也可能位于应用程序的网络根目录之外!但是,Apache 需要有权访问该文件(基于文件系统权限)。对于此示例,假设您所有的图像都放入 /data/mydomain/images。您的脚本可能如下所示:

$image_id = $_GET['uuid'];
// ...
$sql = "SELECT * FROM images WHERE uuid='$image_id' LIMIT 1";
$result = mysql_query($sql);
$r = mysql_fetch_array($result);

// DB has the RELATIVE path
$imagepath = "/data/mydomain/images" . $r['path'];

// Produce proper Image
header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($imagepath));

echo file_get_contents("$imagepath");

请注意,如果您想支持更多 image/mime 类型,则需要更多代码。

数据库

最后,在您的数据库中,您至少需要 images table 中的两个字段:

  • uuid:图片的UUID。将其设为主键,或者如果您更喜欢 auto_increment 整数键,请索引此列(为了提高性能)
  • rpath:图片在存储位置的相对路径(例如:/somefolder/image1.jpg

应该就这些了:)。我没有测试过以上任何一项,但是当把所有这些放在一起时应该可以达到你想要的效果