2014-01-24 31 views
0

與名mod_rewriting我與URL格式的網頁:從數據庫

www.site.com/events/event.php?id=1&cat_id=4

我想它改寫到更多的東西搜索引擎友好的,即

www.site.com/events/name-of-event

(我不需要我的URL中的類別名稱,只是爲了創建動態的麪包屑鏈接的頁面)。

我在我的MySQL數據庫中有事件名稱,我想在URL中使用它。我試圖修改this answer中的代碼,但沒有成功。誰能幫忙?

編輯:

RewriteRule ^events/([^/]+)$ event.php?event_name=$1 [L,QSA]這是我最初嘗試(在CAT_ID不是URL作爲頁面的檢查必不可少,並檢索如果沒有傳遞一個默認值)。

+1

你是如何適應呢?什麼沒有用? – naththedeveloper

+0

@ IgnacioVazquez-Abrams是嗎?考慮到這個問題顯然沒有很好的答案,也許有人可能會爲這個新的答案... – user3181236

+0

@FDL更新問題 – user3181236

回答

0

爲了向後兼容,您可能需要將events/event.php?id=123重定向到新的events/event_name網址。問題是,正如人們在你的鏈接答案中所說的那樣,沒有真正的方法通過Apache連接到數據庫,所以你必須在文件本身中處理重定向/翻譯。

規則本身必須是這個樣子:

RewriteRule ^events/([^/]+)/?$ /events/event.php?event_name=$1 [L,QSA] 

然後,在你event.php你會做這樣的事情:

#This is the top line of your file. 
if(isset($_GET['id'])) { 
    $id = intval($_GET['id'], 10); 
    $event_name = do_database_query_NOAW($id); 
    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: /events/' . $event_name); 
    exit(); 
} 

#code that now uses (the sanitized) event name instead of the sanitized id 
if(!isset($_GET['event_name']) || !preg_match('/[A-Za-z0-9-]+/', $_GET['event_name'])) { 
    header('HTTP/1.1 400 Bad Request'); 
    exit(); 
}