簡體   English   中英

如何使用.htaccess和php生成類似於stackoverflow的url重定向?

[英]How to generate url redirects similar to stackoverflow using .htaccess and php?

背景

就像在stackoverflow的url結構中注意到的那樣,每個問題都有一個ID,后跟問題標題。 例如:

http://stackoverflow.com/questions/1039725/how-to-do-url-re-writing-in-php

上面的網址的問題ID為: 1039725 。問題標題為: how-to-do-url-re-writing-in-php

只是為了使用此URL,即使要為標題部分輸入一些垃圾內容,只要存在問題ID,就會顯示相同的問題內容。 例如,以下網址也將提供相同的內容。

http://stackoverflow.com/questions/1039725/some-junk-stuff-title

更多IMORTANTLY地址欄會自動更改為:

http://stackoverflow.com/questions/1039725/how-to-do-url-re-writing-in-php

我的問題

我了解stackoverflow可能使用.htaccess將所有帶有問題ID的網址重定向到某個后端(例如php頁面)進行處理。 但是地址欄如何自動更改為實際的問題標題?

最重要的是:如何在不重定向到任何真實文件夾的情況下實現顯示完整的url? 即我不想在PHP中使用header()重定向到某個文件夾。

這樣做的目的是避免只是為了重定向而為每個問題創建不必要的Web文件夾。

它沒有您想象的那么神奇。 每個帖子在存儲它的數據庫中都有一個關聯的子標簽(或者該子標簽是即時生成的,沒關系)。 從數據庫中檢索時,只有數字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');
}

這是您可以為此使用的邏輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM