【问题标题】:Passing codes in URL在 URL 中传递代码
【发布时间】:2012-10-07 18:37:09
【问题描述】:

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

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

代码:QeAuADr0yL

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

【问题讨论】:

  • 是唯一码,短码,没什么特别的;只是用来缩短网址
  • 这些通常是编码的请求参数,然后可用于解码和提取实际值。在其他一些情况下,它们也可能被映射到数据库键,但我认为这种情况不太常见。

标签: php mysql apache web


【解决方案1】:
 http://instagram.com/p/QeAuADr0yL

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

【讨论】:

    【解决方案2】:

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

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

    p1p2 是变量,ab 是它们的值

    这些值可使用$_GET['a']$_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;
    

    第一个参数的值可以在 a-z 和/或 A-Z 之间 参数 2 的值介于 a-z A-Z 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]
    

    【讨论】:

    • 如果你还需要帮助,尽管问
    【解决方案3】:

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

    url.com?x=5273909c02b8ce7ae42a4e21542b3326

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

    还有其他的hasing算法,here's some docs.

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

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

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

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

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

    【讨论】:

    • 感谢 Adam,md5 生成的代码太长。知道如何生成短代码,例如 10 的代码宽度
    【解决方案4】:

    你指的是 'GET' 方法吗?

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

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

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

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

    【讨论】:

    • 不,他问的是 www.a.com/ajkfksdhglofxds ;为什么不 www.a.com/this-is-what-i-want
    • 谢谢,我知道 GET 方法,想知道这段代码“QeAuADr0yL”是如何隐藏的/在 MYSQL 中插入新记录时它是如何创建的。
    猜你喜欢
    • 1970-01-01
    • 2017-03-02
    • 2019-10-18
    • 1970-01-01
    • 2016-10-05
    • 2014-04-05
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多