如何创建带有uuid的链接


How to create a link with uuid?

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

我想创建如下链接(img标签中的src):"bla-bla.com/7e0cfd63-dfc1-4038-a859-ff201dea7b65"并且能够将其"解码"回来。

原因>

我的链接(img标签中的src)现在看起来像"myDomain/somefolder/image1.jpg",所以如果用户将"image1.jpg"更改为"image2.jpg",他将获得"直接访问"(我认为它是这样调用的)。

所以我想阻止"直接访问",但仍然可以共享链接。

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

服务器:赢得2012 r2Apache+php5+MySQL

p.S.

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

谷歌搜索给出了很多关于UUID/GGUID脚本/技术/它的工作原理等的结果,但我找不到链接的实现。。。

p.p.S

如果你在stackoverflow上查看我的个人资料图片:

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

将f更改为d,您将获得不同的图像

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

这是我不想发生的事。

我建议使用:

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

mod_rewrite

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

RewriteEngine on 
RewriteRule ^/img/(.*)$ get_image.php?uuid=$1 [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

此脚本将使用数据库来确定图像的真实位置,该位置可能在应用程序的web根目录之外!但是,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表中至少需要两个字段:

  • uuid:图像的UUID。将其作为主键,或者如果您希望使用auto_increment整数键,请对此列进行索引(以提高性能)
  • rpath:存储位置中图像的相对路径(例如:/somefolder/image1.jpg

这应该是全部:)。我还没有测试过上面的任何一个,但当把所有这些放在一起时,应该会达到你想要的