2011-12-27 98 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