【问题标题】:Use long list of .htaccess RewriteRule or use a single catchall and direct in PHP?使用一长串 .htaccess RewriteRule 还是在 PHP 中直接使用一个包罗万象?
【发布时间】:2012-01-28 17:08:54
【问题描述】:

说我使用 .htaccess 文件来获得干净的链接,但是我有一个很长的 RewriteRules 列表(比如 20 个)来做这样的事情

domain.com/user/adam --> domain.com/user.php?need=user&user=adam
domain.com/test.js --> domain.com/index.php?need=code&file=test.js
domain.com/test.js/edit --> domain.com/index.php?need=code&file=test.js&action=edit

在 PHP 中使用 catch all RewriteRule 并在斜杠/解析和直接拆分是否更好?还是 RewriteRule 的长列表更好?

更好,我想我的意思是更快,更健壮。我知道全包式保养会更好。

另外,你能推荐一个关于这样做的 php 类示例/文章吗?

【问题讨论】:

  • 你在使用任何框架吗?使用 MVC?
  • 这非常接近我自己的问题;)这里:stackoverflow.com/questions/7702667/…
  • 它正在使用 MVC 方法实现,但我没有使用框架。
  • 对你有用的都可以。如果您发现自己不得不经常更改/添加规则,最好找到一个更通用的解决方案,比如包罗万象。当您谈论性能时,20 条规则并不多。我不会担心的。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

如果这回答了您的问题,那么使用大量重写规则列表就没有问题。我已经看到重写规则会填满我的整个监视器,然后是一些 - 除非您对它们有问题,否则大量列表没有问题。

【讨论】:

    【解决方案2】:

    您可能想看看 ZendRouter - 即使您没有使用框架,您也可能想遵循他们的想法。

    http://framework.zend.com/manual/en/zend.controller.router.html

    基本上 .htaccess 将所有请求路由到 index.php 文件,但与 RegEx 的任何匹配项除外:

    RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php
    

    或任何非文件/目录(尽管我认为检查文件/目录是否存在而不是正则表达式请求的 URL 的成本略高)

    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    

    一旦您利用了这种类型的路由 - 您可以为 URL 定义标准正则表达式以映射到控制器/操作

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 1970-01-01
      • 2011-07-23
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      相关资源
      最近更新 更多