【发布时间】:2011-10-04 01:24:37
【问题描述】:
我正在编写一个简单的方法来将路由映射到文件,我遇到了两种方法。
我猜大多数框架都使用第一个,是使用 $_SERVER['REQUEST_URI'] 变量来提取 index.php 之后的所有内容:
RewriteRule ^(.*)$ index.php [QSA,L]
在Drupal中使用了第二种方式,路由只是作为查询字符串传递。
RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]
现在,“Drupal 方式”对我来说似乎要简单得多。使用另一种方法,您必须在 $_SERVER['REQUEST_URI'] 和 $_SERVER['SCRIPT_NAME'] 上都使用“explode”,然后使用类似 array_diff_assoc 的东西来删除脚本名称和子目录名称(如果有的话)。这不是很多工作,但是如果使用 Drupal 方式您可以简单地提取 $_GET['q'] 值,为什么没有人这样做呢?有什么缺点(如果有的话)?
谢谢。
【问题讨论】:
-
我不知道你需要
explode(),你可以在一行中使用substr()和strpos():codepad.org/C3xBg4CI -
@Jared Farrish:但如果脚本在子目录中执行,它的名称将保留在
REQUEST_URI。
标签: php url-rewriting url-routing