Mod-Rewrite还是PHP路由器?

joh*_*ack 16 php routing

我正在讨论使用以下两个选项之一路由我的请求:

选项1:简单的捕获路由,使用Mod-Rewrite和漏斗写入$_GET路由到index.php进行加载...

#default routing
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule    ^blog/([0-9]+)?$    index.php?rt=blog&params=$1    [L,QSA]
// ..more custom routes, and then a default route
RewriteRule    ^([A-Za-z]+)/([A-Za-z]+)/(.*)?$    index.php?rt=$1/$2&params=$3    [L,QSA]
Run Code Online (Sandbox Code Playgroud)

选项2:简单地将请求路由到Front Controller,并创建一个PHP路由类来处理路由...

#default routing
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

/* --- on front controller, process $_GET['rt'] --- */
Run Code Online (Sandbox Code Playgroud)

在一天结束时,哪个会运行得更快,更容易保护,更容易维护?

还有其他想法吗?

注意:我没有运行已知的框架.我正在构建自己的MVC模式来学习它.

Mar*_*c W 16

通常在MVC框架中,这种事情通常最好由前端控制器(命名index.php等)处理.您使用mod_rewrite然后隐藏index.php所有URL,以便您的用户看到漂亮的干净路径.

它在PHP中比在Apache的重写指令中更容易处理.PHP更灵活,更易于编写/理解.我不确定我是否曾经看到mod_rewrite被用作任何网络框架的唯一路由引擎,现在我想到了它.

您的第二段代码是重写指令的方法.

  • 我同意.我用30多个自定义重写路线工作的网站总是很痛苦.PS - 添加一些路由,让您的Web服务器处理图像,js和CSS.请参阅zend框架示例htaccess - http://framework.zend.com/wiki/display/ZFDEV/Configuring+Your+URL+Rewriter (4认同)