2

我在一些网站上看到过,比如 facebook、twitter 和 youtuBe。代码在 URL 中传递,如下例所示。

想知道是否有人知道它背后的完整逻辑(PHP,MYSQL)。提前致谢。

代码:QeAuADr0yL

例如:http: //instagram.com/p/QeAuADr0yL

4

4 回答 4

1
 http://instagram.com/p/QeAuADr0yL

上面的链接“QeAuADr0yL”指定了基于它获取数据的唯一标识符。这个标识符是通过使用 md5() 或 sha1() 或其他..

于 2012-10-17T13:36:04.747 回答
1

当请求http://instagram.com/p/QeAuADr0yL被 apache web 服务器解析时,使用 .htaccess 文件中存储的代码,它知道第一个参数值为p,第二个参数值为hdashfdsahgofosa

您的请求可以翻译为www.a.com/index.php?p1=a&p2=b

其中p1p2是变量,a并且b是它们的值

这些值可以使用$_GET['a']and$_GET['b']方法获得;

我会给你一个完整的 htaccess 文件示例和规则:

RewriteRule ^([a-zA-Z-]+)/(product)-([0-9]+)$ index.php?action=$1&product=$3 [NC,L]

www.a.com/aBcdE/product-1836455上面的代码在浏览器中看起来像

它被翻译为:

$action = aBcde;

$product = 1836455;

第一个参数的值可以在 az 之间和/或 AZ 参数 2 的值在 az AZ 0-9 之间 -

Options +SymLinksIfOwnerMatch

RewriteEngine on


RewriteRule ^([a-zA-Z-]+)/(producator)-([0-9]+)$ index.php?action=$1&producator=$3 [NC,L]
RewriteRule ^([a-zA-Z-]+)-([0-9]+)/(producator)-([0-9]+)$ index.php?action=$1&id=$2&producator=$4 [NC,L]

RewriteRule ^([a-zA-Z-]+)/(producatorx)-([0-9]+)$ index.php?action=$1&producatorx=$3 [NC,L]
RewriteRule ^([a-zA-Z-]+)-([0-9]+)/(producatorx)-([0-9]+)$ index.php?action=$1&id=$2&producatorx=$4 [NC,L]

RewriteRule ^([a-zA-Z-]+)$ index.php?action=$1 [NC,L]

RewriteRule ^([a-zA-Z-]+)-([0-9]+)$ index.php?action=$1&id=$2 [NC,L]

RewriteRule ^(tag)/([a-z0-9]+)$ index.php?action=tag&tag=$2 [NC,L]

RewriteRule ^([a-zA-Z-]+)-([0-9]+)/(update)-([a-z0-9]+)$ index.php?action=$1&id=$2&saction=update&code=$4 [NC,L]
RewriteRule ^([a-zA-Z-]+)-([0-9]+)/(delete)-([a-z0-9]+)$ index.php?action=$1&id=$2&saction=delete&code=$4 [NC,L]

RewriteRule ^([a-zA-Z-]+)-([0-9]+)/([a-zA-Z-]+)-([0-9]+)$ index.php?action=$1&id=$2&saction=$3&sid=$4 [NC,L]

RewriteRule ^(.*)-([0-9]+).html$ index.php?action=details&id=$2 [NC,L]
于 2012-10-17T13:45:27.300 回答
0

您指的是“GET”方法吗?

如果您看到诸如 www.someurl.com/?param=value&otherparam=othervalue 之类的网站,则这称为 GET。

它创建了一个可以在 PHP 中使用类似的东西访问的数组

    <?php echo $_GET["param"]; ?>

这将打印出参数的值,在本例中为“值”。

于 2012-10-17T13:32:46.533 回答
0

在 URL 中传递的最常见的代码是哈希。有不同的算法,大多数人使用 md5 但有更安全的算法。您可以制作散列,然后如果您想根据散列的正确性限制对页面的访问,您可以检查该值。

url.com?x=5273909c02b8ce7ae42a4e21542b3326

if( $_GET['x'] == md5('hashcode') ) {
   // it matches
}else{
   // it doesn't
}

还有其他的算法,这里有一些文档。

当通过 .htaccess 文件用作路径的一部分时,您可以从 URL 中获取这些信息。

用于这些特定站点的特定算法可能是自定义的,但 PHP 中有许多预设函数可以让您模仿这一点。

要生成较短的字符,您可以使用 substr() 函数获取前几个所需字符,并使用数据库确保没有冲突。创建新代码时,将其截断到所需的长度并查询数据库以查看它是否已被使用,如果没有则插入。

或者您可以自己编写并使用与数据库相同的过程来确保没有冲突。

如果你有很多散列,你可能需要一些时间来制作一个包含所有字母和数字的好的随机字符串生成器,你的散列越短,冲突的机会就越大,可能的组合池就越小. 使用 md5 将可能的字符从 15^(使用的字符)增加到 36^(使用的字符)将大大增加您的可能组合池。

于 2012-10-17T13:37:59.193 回答