2009-11-12 117 views
1

我制作了自己的自定义php框架,它实现了MVC设计模式。 在这里面,所有的网址为构建这样PHP MVC框架中的URL重写

 
mysite.com/index.php?route=controller/function/parameters/go/here 
mysite.com/index.php?route=products/shirts/99 

我已经到位htaccess的删除的index.php?路径=从URL中的一部分,使他们更 海基会使它们看起来像这样:

 
mysite.com/controller/function/parameters/go/here 
mysite.com/products/shirts/99 

我只是想在每个URL的像这样结束追加后缀:

 
mysite.com/controller/function/parameters/go/here.html 
mysite.com/products/shirts/99.html 

也许htaccess可以用于实现或可能的其他解决方案。

有什么想法吗?

在此先感谢。

+0

我不明白你为什么要为不是纯HTML的页面添加'.html'后缀。这对SEO或用户没有任何好处 - 实际上它可能会使情况变得更糟,因为它是不必要的绒毛。 – DisgruntledGoat 2009-11-12 13:20:44

+0

你是对的,但一些用户要求我将这个功能添加到框架中,这就是为什么我正在寻找一个解决方案。 – Sarfraz 2009-11-12 13:34:39

+0

如果您问如何将.html附加到您的框架生成的链接(而不是解析链接的mod_rewrite规则),那么在没有了解框架的情况下就没有真正的方法来回答它。 – 2009-11-12 23:22:13

回答

2

我假设你正在做的“好”的网址然后将其改写到你的index.php与请求重写为get var或'route'。

将来会遇到一些问题,其中一个将是如何处理请求中的变量(如果我记得几年前处理类似的概念)。

就个人而言,我只是设置您的.htaccess发送所有无效的文件/目录请求到您的bootstrap/index.php文件。然后在PHP中进行解析,而不是在一个过于复杂的mod_rewrite中。 你已经解析了'route'get var,为什么不解析整个请求呢?

在这一点上,你的第一步index.php文件将是:

  • 取出。扩展名(或将请求标识为html/xml/json/etc)
  • 删除任何类型的基本URL。
  • 像你一样解析剩下的路线get var。
0

我不是专家,但试试这个:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?route=$1 [QSA,L] 
</IfModule> 
+0

感谢您的回答尼基,但我没有看到上述代码中的HTML后缀。反正我还没有尝试过。 – Sarfraz 2009-11-12 13:33:40

+0

大家好,还有什么想法吗? – Sarfraz 2009-11-12 13:35:20

2

如果我理解正确的话,你说你已经使用htaccess的删除路线=你也想删除的.html后缀。我认为你正以错误的方式接近它。

我都在你的应用程序指向您的首选网址的链接,然后有htaccess的在路线PUT =和的index.php元素

所以链接看起来是这样的:

<a href="mysite.com/controller/function/parameters/go/here.html" /> 

,你可以使用类似于尼基吨一个htaccess规则转换到这一点:

mysite.com/index.php?route=controller/function/parameters/go/here.html 

事实上尼基将正常工作。您可以选择删除index.php代码中的.html后缀或htaccess规则 - 在我看来,从PHP更容易。

如果你想删除的.html使用htaccess的,那么这将可能工作(未经测试):

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)\.html$ index.php?route=$1 [QSA,L] 
</IfModule> 
+0

谢谢你的回答史蒂夫,但你可能不明白我的问题correclty。 我不想删除html访问,我想将它添加到每个URI,但我不知道该怎么做? 我正在使用一个基于路由自动生成URI的框架。所以我不能把链接添加到他们的HTML后缀。 我希望我澄清这一次唉。 仍在寻找解决方案! – Sarfraz 2009-11-12 14:09:13

+0

简单地说,如何为每个url添加html后缀? – Sarfraz 2009-11-12 14:10:16

1

与其他人一样,我认为附加需求发生在您的框架中。

我想你有这样的功能: $ html-> link('products/shirts/99');

该函数应该添加'.html'。

您的网址处理程序应该是这样的:

// $查询产品/衬衫/ 99.html

$ L =爆炸($查询, '/'); $ last = length($ l); $ l [$ last-1] = substring($ l [$ last-1],find($ l [$ last-1],'。html'))//我正在做内存中的参数,所以请检查他们。

这是如何修改CakePHP的index.php。我建议你看看这个代码作为指导。

+0

哟对大卫,终于我想出了解决方案:)感谢所有谁回答... – Sarfraz 2009-11-16 06:10:57