php - 如何在不使用 GET 方法的情况下获取数据库结果?
问题描述
好吧,我不知道这个问题应该怎么称呼,但我想知道像 bit.ly 这样的网站是如何工作的。
我的意思是 - 当我缩短链接时,我会得到一个结果:
bit.ly/**e1x2a3m4p5l6e** not GET method used here.
我知道如何获得类似bit.ly?id=e1x2a3m4p5l6e
(GET 方法)的效果,但我不知道如何获得类似上面的效果。
解决方案
您基本上可以通过两种方式做到这一点:
带有 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
会很好。
推荐阅读
- javascript - 创建可在 Tabulator 中直接单击的复选框
- python - 美丽的汤:FileNotFoundError:[Errno 2]没有这样的文件或目录:
- python - sklearn中的x_test、x_train、y_test、y_train有什么区别?
- java - NoHostAvailableException:所有尝试查询的主机都失败(没有尝试过主机),然后是 SocketException
- r - 创建类似距离矩阵的东西
- c# - 在 Dialogflow 中返回音频
- google-apps-script - 可以缓存谷歌脚本对象吗?
- postgresql - 如何在 Doobie (Postgres) 中读取/写入时间戳
- javascript - 使用 ES6 优化 javascript 中的递归类别和子类别函数
- c++ - 在双数组的 calloc 上写入大小为 8 的无效