2013-11-23 57 views
1

終於讓我的代碼發佈一個URL友好的標題到我的數據庫(以後用作SEO優化的URL),我現在看如何讓我的博客腳本接受上述URL。

理想情況下,我希望我的URL以類似堆棧溢出的方式出現。

目前我的網址是這樣的:

blog.php?action=viewArticle&articleId=26 

我希望它看起來是這樣的:

/blog/responsive-layout-design/ 

我已經整理出了劇本的一側 - 即創造新的URL側面,並將其保存在數據庫中,但我正在努力研究如何在前端實現該功能。

我已經看了看四周點綴了幾個導遊和例子,但它們只是展示如何創建一個URL,例如:

store.php?action=viewItem&itemID=34 to store/item/34 

很顯然,我可以用我的網址做到這一點很容易,但它仍然只是將顯示文章ID,而不是文章標題。

這是我通過ID從數據庫中提取文章的當前代碼 - 這將如何修改以獲得我正在查找的功能?

function viewArticle() { 
    if (!isset($_GET["articleId"]) || !$_GET["articleId"]) { homepage(); return; } 
    $results = array(); 
    $results['article'] = Article::getById((int)$_GET["articleId"]);  
    $results['pageTitle'] = $results['article']->title . " | Blog"; 
    require(TEMPLATE_PATH . "/viewArticle.php"); 
} 
+0

爲什麼不使用框架?因此,路由將很容易,因爲「Route :: get(」store/item「,function($ id){echo」product id:「。$ id;});更多地在http://laravel.com/docs/routing – Qullbrune

回答

1

我一直這樣做的方式是在數據庫中設置URL slug。使用的.htaccess

RewriteRule ^/(blog)/(.*)/$ /blog.php?slug=$2 

當選擇頁面內容進行

tblBlog 
blogID | blogTitle | blogContent | blogURLSlug 

你會再建立漂亮的網址,選擇使用URLSlug代替

所以你存儲像

$stmt = $dbh->prepare("SELECT `blogTitle`, `blogContent` FROM `tblBlog` WHERE `blogURLSlug` = :slug"); 
$stmt->bindParam(':slug', $_GET['slug']); 
$stmt->execute(); 
$blogData = $stmt->fetch(); 

這樣,您可以訪問/blog/RWD-is-cool/,它會從數據庫中選擇URLSlug = RWD-is-cool

+0

感謝您的幫助@DaryllDoyle我已經將我的getbyID代碼添加到問題中 - 看到後 - 您認爲這將很容易實現嗎? – Jack

+0

Hi @Jack,是的,應該不會太難實施一些小的更改首先,你必須將'Article :: getById()'改爲'Article :: getBySlug()',然後把所有對$ _GET ['articleId']'的引用改爲'$ _GET [ 'articleSlug']'或類似的東西 –

1

你不需要數據庫來做到這一點。所有的PHP框架(我知道)支持這種類型的URL和用於識別什麼叫做路由的方法。基本上url的結構如下www.website.com/controller(page)/method/getparameters。你用什麼來訪問這個是一個入口點。換句話說,根目錄中只有1 index.php文件,並且您將所有調用重定向到該文件,然後將URL分解爲其給定組件,然後決定從那裏執行什麼操作。一個簡單的例子與Apache:

htaccess的

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*$ index.php [L,NS] 

索引。PHP

$page = str_replace('index.php','', $_SERVER['PHP_SELF']); 
$page = str_replace($page,'',$_SERVER['REQUEST_URI']); 
$page = explode('/',$page); 
$controller = array_shift($page); 
$parameters = array(); 
foreach ($page as $val){ 
    $parameters[] = urldecode($val); 
} 

然後在URL www.website.com/blog/responsive-layout-design/你將有

$controller => 'blog' 
$parameters => array(
    0 => 'responsive-layout-design', 
    1 => '' 
) 

希望這是有幫助的。

+0

謝謝@php_nub_qq - 我已經添加了一段代碼到原來的問題,我相信需要編輯 - 你會有任何想法這將如何工作? – Jack

+0

@Jack哦,爲了做到這一點,你的文章標題必須是唯一的,然後不要在URL中傳遞'id',而是傳遞標題並根據它選擇t他以同樣的方式根據id選擇。 –

相關問題