首页 > 解决方案 > 如何在不使用 GET 方法的情况下获取数据库结果?

问题描述

好吧,我不知道这个问题应该怎么称呼,但我想知道像 bit.ly 这样的网站是如何工作的。

我的意思是 - 当我缩短链接时,我会得到一个结果:

bit.ly/**e1x2a3m4p5l6e** not GET method used here.

我知道如何获得类似bit.ly?id=e1x2a3m4p5l6e(GET 方法)的效果,但我不知道如何获得类似上面的效果。

标签: phphyperlink

解决方案


您基本上可以通过两种方式做到这一点:

带有 mod_rewrite 的 .htaccess 路由

.htaccess在根文件夹中添加一个名为的文件,然后添加如下内容:

RewriteEngine on
RewriteRule ^/?Some-text-goes-here/([0-9]+)$ /picture.php?id=$1

这将告诉 Apache 为该文件夹启用 mod_rewrite,如果它被询问与正则表达式匹配的 URL,它会在内部将其重写为您想要的内容,而最终用户不会看到它。简单但不灵活,因此如果您需要更多功能:

PHP 路线

将以下内容放入您的 .htaccess 中:(注意前导斜杠)

FallbackResource /index.php

这将告诉它为通常无法在您的站点中找到的所有文件运行您的 index.php。在那里你可以例如:

$path = ltrim($_SERVER['REQUEST_URI'], '/');    // Trim leading slash(es)
$elements = explode('/', $path);                // Split path on slashes
if(empty($elements[0])) {                       // No path elements means home
    ShowHomepage();
} else switch(array_shift($elements))             // Pop off first item and switch
{
    case 'Some-text-goes-here':
        ShowPicture($elements); // passes rest of parameters to internal function
        break;
    case 'more':
        ...
    default:
        header('HTTP/1.1 404 Not Found');
        Show404Error();
}

这就是大型网站和 CMS 系统的做法,因为它在解析 URL、配置和数据库相关 URL 等方面提供了更大的灵活性。对于零星使用,硬编码的重写规则.htaccess会很好。


推荐阅读