2011-12-27 33 views
1

我有一個CAKEPHP應用程序,它在webroot文件夾的.htaccess中具有以下重寫規則。Url在CAKEPHP應用程序中重寫獨立php腳本

<IfModule mod_rewrite.c> 
RewriteEngine On RewriteCond %{HTTP_HOST} !^domain.com$ [NC] 
RewriteRule ^(.*)$ domain.com/$1 [L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

我從來沒有與CakePHP的工作前,是一個PHP初學者,寫了一個獨立的PHP腳本,我有一個在根目錄文件夾命名爲「產品」文件夾中。我在這個文件夾中的索引頁面需要一個id,然後從數據庫中檢索產品名稱和描述。 (有數百種產品)

所以:www.domain.com/products/index.php?id=1

我想包括規則由URL應該在哪裏樣子: www.domain .com/products/the-flux-capacitor

請問有人能告訴我如何在不破壞任何CakePHP重寫的情況下實現這個功能嗎?

+0

你爲什麼不寫在cakephp應用程序中的代碼?爲什麼你需要在webroot中的一個PHP文件? – pleasedontbelong 2011-12-27 22:15:34

+0

感謝您的回覆。我沒有嘗試,因爲我以前從未使用過Cake,我不想冒險觸摸代碼,以防萬一它變得瘋狂 – jIMBOBOB 2011-12-27 22:20:46

+0

在我看來,如果您瞭解Cakephp的基礎知識幷包含您的代碼,風險會更低在蛋糕裏面的一個控制器.. :),在我看來,它會更容易。 CakePHP非常簡單 – pleasedontbelong 2011-12-27 22:34:29

回答

0

如果您使用以下URL結構www.domain.com/products/the-flux-capacitor您仍然需要一種方法將每個產品名稱(必須是唯一的)映射到其ID,這將是一個更大的努力。

但是,如果你使用了略微修改URL結構,www.domain.com/products/the-flux-capacitor/id(甚至亞馬遜做到這一點),那麼它是非常容易和下面的.htaccess代碼將執行改寫爲你

#existing rules... 
RewriteRule ^(.*)$ domain.com/$1 [L,R=301] 

#Insert new rule to match products, assumes ID is numeric 
RewriteRule ^products/[^/]+/([0-9]+) products/index.php?id=$1 [L,QSA,NC] 

#existing rules ... 
RewriteCond %{REQUEST_FILENAME} !-d 
+0

嗨,謝謝你的迴應。我的ID是字母數字,所以我應該使用:RewriteRule^products/[^ /] + /([A-z0-9] +)products/index.php?id = $ 1 [L,QSA,NC]?另外,規則如何知道如何在URL中使用「通量電容」? – jIMBOBOB 2011-12-28 11:44:44

+0

如果它的字母數字使用'[a-zA-Z0-9]'。我假設你的HTML已經有了'www.domain.com/products/the-flux-capacitor/id'形式的鏈接,或者你將在你的應用程序中構建這些鏈接。該規則只會將此鏈接映射到您的'index.php',忽略產品說明並僅提取id。 – 2011-12-28 14:42:43