2011-05-01 75 views
4

我正在嘗試編寫一個.htaccess文件,這會使我的網址對搜索引擎更具吸引力。我基本知道如何做到這一點,但我想知道如何動態地做到這一點。在htaccess中創建動態網址

我的URL通常是這樣的:

view.php?mode=prod&id=1234 

我想要做的就是把ID從URL,做一個數據庫查詢,然後把標題從數據庫返回到的URL。是這樣的:

/products/This-is-the-product-title 

我知道有些人已經與phpBB論壇的網址和主題來實現這一點,我已經盡力向下跟蹤代碼,它替換爲新標題字符串URL實際的URL,但沒有運氣。

我知道我可以重寫URL只用ID,如:

RewriteRule ^view\.php?mode=prod&id=([0-9]+) /products/$1/ 

是否有PHP的方式覆蓋顯示的網址是什麼?

回答

6

目前您想知道如何將您醜陋的URL(例如/view.php?mode=prod&id=1234)轉換爲漂亮的URL(例如/products/product-title)。反過來看看這個。

你想要的是有人打字/products/product-title實際帶他們到/view.php?mode=prod&id=1234可以訪問的頁面。

即您的規則可能如下:

RewriteRule ^products/([A-Za-z0-9-])/?$ /view.php?mode=prod&title=$1 

然後在view.php做基礎上,title找到id查找。然後照常進行。

+0

那麼這是否意味着我需要回顧並編輯我現有的站點間鏈接? – chaoskreator 2011-05-01 01:10:14

+0

是的,它的確如此。我想這使得這個答案更多的是未來的解決方案。爲了使舊的鏈接工作,你可以根據你的'id'進行查找,找到標題,然後重定向到'/ products/looks-up-title'。沒有改變'.htaccess',只是你的'view.php' – Matthew 2011-05-01 01:12:54

+0

Eeesh。好吧,好吧,看起來我有很多鏈接重寫... – chaoskreator 2011-05-01 01:34:25

0

一種方法是輸出一個Location:標題來強制重定向到所選的URL。

2

這樣做的一種方式,就像大多數mvc框架一樣。您可以將所有頁面重定向到同一個index.php文件,並使用腳本確定要加載的頁面。

的.htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 
</IfModule> 

和你的PHP文件將有這樣一個腳本:

// get the url 
    $uri = (isset($_SERVER['REQUEST_URI']))?$_SERVER['REQUEST_URI']: false; 
    $query = (isset($_SERVER['QUERY_STRING']))?$_SERVER['QUERY_STRING']: ''; 
    $url = str_replace($query,'',$uri); // you can edit this part to do something with the query 
    $arr = explode('/',$url); 
    array_shift($arr); 

    // get the correct page to display 
    $controller =!empty($arr[0])?$arr[0]:'home'; // $arr[0] could be product/ 
    $action = isset($arr[1]) && !empty($arr[1])?$arr[1]:'index'; // $arr[1] can be product-title 
    } 

當然你必須努力驗證碼時尚應用程序

我希望這可以幫助