2011-08-05 86 views
1

我有一個社交網絡,允許用戶寫博客和提問。我想創建動態URL,通過PHP在URL末尾發佈博客或問題的標題。如何創建動態網址?

例子:

www.blah.com/the_title_here 

尋找最乾淨最有效的方式做到這一點。

回答

6

你通常會存儲URL友好「SLU g「的數據庫行,然後有一個PHP腳本來查找與該slug匹配的帖子。

舉例來說,如果你有一個名爲index.php是拿了一個名爲slug參數腳本...

<?php 
if (isset($_GET['slug'])) { 
    $sql = "SELECT * FROM `your_table` WHERE slug = ? LIMIT 1"; 
    $smt = $pdo->prepare($sql); 
    $smt->execute(array($_GET['slug'])); 
    $row = $smt->fetchObject(); 
    // do something with the matching record here... 
} 
else { 
    // display home page 
} 

...你可以使用的.htaccess然後重新寫請求:

RewriteEngine on 
RewriteRule ^(.+)$ index.php?slug=$1 
0
"www.blah.com/$id/".preg_replace('/^[a-z-]+/','',preg_replace('/[ ,;.]+/','-',strtolower($title))) 

,並且只使用$id

從標題

"How do I create dynamic URLs?"

它創建網址

www.blah.com/15/how-do-i-create-dynamic-urls

+0

似乎很抽象?這是幹什麼的?標題爲「 –

+0

」如何創建動態網址?創建網址:www.blah.com/15/how-do-i-create-dynamic-urls –

1

有很多開源軟件可以做到這一點,你可以看看WordPress.org或MediaWiki.org來做到這一點。您需要組合.htaccess或Apache配置設置才能將mod_rewrite規則添加到它們。

接下來,您將需要一個控制器文件,正如Martin Bean寫的,以查找帖子...但確保您正確地轉義/清理/驗證輸入,否則如果您擁有SQL注入或XSS您的網站上的JavaScript。

所以最好使用id方法,並且只使用slug來實現漂亮的url目的。 WordPress.org軟件也表明,只有通過slu going纔會讓你的帖子變慢。所以,你可以使用一個組合的www.blah.com/slug-phrase-goes-before-the-numeric_id譜寫正則表達式匹配:.*(\d+)$

2

使用數據庫做這將是傷心 :( 可能有很多情況下,你並不需要查找數據庫,你會用這種方法如: - 。如圖馬丁讓你的路徑或蛞蝓www.blah.com/signup(在這裏沒有點)和DB連接吞噬了資源,嚴重的資源...

RewriteEngine on 
RewriteRule ^(.+)$ index.php?slug=$1 

大多數框架使用文件系統實現更清晰的網址。 一個文件夾來保存所有文件和 東西是在理論上

<?php 
$default = "home"; 
//function to make sure the slug is clean i.e. doesnot contain ../ or something 
if(isset($_GET['slug'])) $slug = clean($_GET['slug']); 
if(!isset($slug)) $slug = $default; 
$files = explode('/',$slug);// or any other function according to your choice 
$file = "./commands/".$files[0].".php"; 
if(file_exists($file)) 
    require_once($file); 
else 
    require_once("./commands/".$default.".php"); 

類似,您可以讓這個一樣簡單,只要你想的那麼複雜。您甚至可以使用數據庫來確定默認情況下,像什麼馬丁一樣,但應該是在$default,而不是你使用的第一個邏輯......做這種方式

  1. 它的

    優勢比查詢數據庫快得多

  2. 您可以對此進行很多縮放。垂直例如:site.com/users/piyushmishrasite.com/forums/mykickassforum甚至在更深的層次一樣site.com/category/category-name/post-name/comments/page-3
  3. 您可以設置庫和包水平easier.Scaling(添加更多的目錄檢查和每個目錄可以有一個/多個模塊的設置),例如:./ACLcommands/users.php./XMLRPC/ping.php