URL路由与多个脚本的比较

3
我正在尝试了解使用URL路由(URL分发)的好处,相比于仅从不同脚本运行代码。除了更美观的URL(可以通过htaccess使用任何一种模式实现),为什么我要将 /archive/ 重定向到 dispatcher.php?path=/archive/ 而不是简单地将 /*/ 重写为 *.php?在代码重用、组织和错误处理方面,哪种方法更好?您是否曾经从一种模式切换到另一种模式?为什么这样做?转换需要多少工作量?
为背景,我目前正在使用多个脚本的方法。环境是Apache + PHP。这是一个中型项目(40+个顶级PHP页面)。

唯一真正的好处是SEO友好或(很少)易读的链接。通过mod_rewrite规则实现这一点非常麻烦。此外,考虑使用auto_prepend_file,它将把单个入口点的所有其他功能带入您当前的模型中。 - Your Common Sense
1
我很难相信这是唯一的真正好处。顶级错误处理呢? - theazureshadow
@Col. Shrapnel:auto_prepend_file 的问题在于它不够细粒度。据我所知,我无法选择不在某个页面中包含它。 - theazureshadow
2个回答

6

路由的一个主要优势是可以有条件地进行路由,根据用户数据、会话值、时间或其他因素做出地址路由决策。虽然我的大多数项目过于简单,不需要使用此方法,但如果你涉足更复杂的系统,我认为在代码中控制路由能够给你提供一些额外的权力和选择。


我猜将一个登录表单路由到当前页面而不需要一个丑陋的“重定向”URL参数会很容易。有趣 :) - theazureshadow

1

正如其他人所说,它非常适合创建漂亮的URL。手动更新.htaccess文件是一件非常麻烦的事情。

我个人最喜欢URL路由的好处是,您的应用程序不必在每个页面上使用繁琐的包含操作,因为您可以在路由页面的PHP代码中完成此操作。您还可以在那里编写class autoloader,您将永远不必再写单词“include”了。

如果您使用相对路径而不是绝对路径,您可以始终相对于路由文件的位置执行所有操作,而无需跟踪您所在的文件夹,并在决定将文件从一个文件夹移动到另一个文件夹时修复所有这些问题。

定义应用程序范围的常量非常容易。例如,我从未在任何地方硬编码我的网站名称,而是选择使用echo SITE_NAME;,然后我的设计师决定两次更改网站名称。幸运的是,这个在顶层定义的常量可以在没有必要在每个页面上进行包含的情况下随处访问。

另一个好处是,当您拥有一个顶级文件时,非常容易进行错误、异常和404日志记录/处理。


我更喜欢使用include(dirname(__FILE__.'/相对路径'))模式,而不是每次移动文件时都尝试更改我的包含文件。 - theazureshadow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接