如何使用 .htaccess 和 php 生成类似于 stackoverflow 的 url 重定向?
How to generate url redirects similar to stackoverflow using .htaccess and php?
背景
正如人们会在 Whosebug 的 url 结构中注意到的那样,每个问题都有一个 ID,后跟问题标题。例如:
上面的url有题号:1039725
问题标题是:how-to-do-url-re-writing-in-php
只是玩玩这个url,即使在标题部分输入一些垃圾内容,只要有问题ID,就会显示相同的问题内容。例如下面的 url 也会给出相同的内容。
和更重要的是 url 栏自动更改为:
我的问题
我知道 Whosebug 可能使用 .htaccess 将所有带有问题 ID 的 url 重定向到某个后端(比如 php 页面)来处理它。但是地址栏如何自动变为实际问题标题呢?
最重要的是:如何在不重定向到任何真实文件夹的情况下实现显示完整url?即我不想在 php 中使用 header() 重定向到某个文件夹。
我们的想法是避免为了重定向而为每个问题创建不必要的 Web 文件夹。
它没有您想象的那么神奇。每个 post 在存储它的数据库中都有一个关联的 slug(或者该 slug 是动态生成的,这无关紧要)。不过,从数据库中检索时,只有数字 ID 才是真正重要的。之后是一个简单的检查(伪代码):
$question = getFromDatabase($_GET['id']);
if ($question['slug'] != $_GET['slug']) {
header("Location: /questions/$question[id]/$question[slug]", true, 301);
}
仅此而已。
这仅用于 SEO 目的,因此 URL 始终包含当前形式的问题标题并保持 URL 规范。
您可以使用简单的 php 代码
检查代码
$id=$_GET['id'];
$title=$_GET['title']
$dbposttitle=getfromdb($title)
if($dbposttitle==$title)
{
/* code here */
}else
{
header('location:yourdomain/$id/$dbposttitle');
}
这是您可以为此使用的逻辑
背景
正如人们会在 Whosebug 的 url 结构中注意到的那样,每个问题都有一个 ID,后跟问题标题。例如:
上面的url有题号:1039725 问题标题是:how-to-do-url-re-writing-in-php
只是玩玩这个url,即使在标题部分输入一些垃圾内容,只要有问题ID,就会显示相同的问题内容。例如下面的 url 也会给出相同的内容。
和更重要的是 url 栏自动更改为:
我的问题
我知道 Whosebug 可能使用 .htaccess 将所有带有问题 ID 的 url 重定向到某个后端(比如 php 页面)来处理它。但是地址栏如何自动变为实际问题标题呢?
最重要的是:如何在不重定向到任何真实文件夹的情况下实现显示完整url?即我不想在 php 中使用 header() 重定向到某个文件夹。
我们的想法是避免为了重定向而为每个问题创建不必要的 Web 文件夹。
它没有您想象的那么神奇。每个 post 在存储它的数据库中都有一个关联的 slug(或者该 slug 是动态生成的,这无关紧要)。不过,从数据库中检索时,只有数字 ID 才是真正重要的。之后是一个简单的检查(伪代码):
$question = getFromDatabase($_GET['id']);
if ($question['slug'] != $_GET['slug']) {
header("Location: /questions/$question[id]/$question[slug]", true, 301);
}
仅此而已。
这仅用于 SEO 目的,因此 URL 始终包含当前形式的问题标题并保持 URL 规范。
您可以使用简单的 php 代码
检查代码
$id=$_GET['id'];
$title=$_GET['title']
$dbposttitle=getfromdb($title)
if($dbposttitle==$title)
{
/* code here */
}else
{
header('location:yourdomain/$id/$dbposttitle');
}
这是您可以为此使用的逻辑