3

我需要知道“正确”执行站点导航的术语和最佳实践吗?方式,类似于当您通过 url 提问时 stackoverflow 如何路由您:

“http://stackoverflow.com/questions/ask”

就我的 PHP 编程知识而言,我可能会像这样编写代码:

“http://stackoverflow.com/index.php?p=questions&act=ask”

希望你明白我的意思。我想知道这种页面导航和请求/响应处理方法的术语,以及在使用这种标准/方法设计 Web 应用程序时我需要记住的最佳实践、限制或其他任何内容。我什至不知道这一切是否都是用 PHP 或一些用 ASP 或 Ruby 编码的 Web 后端完成的,或者你有什么,所以我用我的猜测填充了标签。

4

3 回答 3

9

大多数 MVC 框架使用的模式是调用路由器的前端控制器。前端控制器通常index.php位于您的 Web 根目录中。接下来,所有不针对现有文件(如 js、css 和图像资产)的请求都需要发送到此控制器。在 apache 中,您可以使用mod_rewrite执行此操作:

RewriteRule ^index\.php$ - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /index.php [L,QSA]

但是,Apache 2.5 中推荐的方法是使用FallbackResource

FallbackResource index.php

如果您使用的是IIS,它具有类似的功能。

index.php中,您可以访问最初使用 请求的 URL $_SERVER['REQUEST_URI']。您应该包括您的路由器(它应该在 Web 根目录之外)并使用请求 URI 调用它。例子:

require '../router.php';

$router = new Router();
$router->process($_SERVER['HTTP_METHOD'], $_SERVER['REQUEST_URI'], $_GET, $_POST);

然后你的路由器可以找到合适的控制器来路由请求。阅读有关MVC 框架的更多信息,并研究一些 示例以更好地了解其他人是如何实现它的。

于 2012-08-15T15:43:12.073 回答
2

他们很可能使用您在 URL 中描述的相同方法(嵌入导航变量),但它是在“幕后”完成的。

允许您呈现此类 URL 的机制称为 MOD 重写。它使用 URL 中的变量和正则表达式的组合,以更加用户友好的方式向最终用户重新表示 URL。

更多信息:http ://httpd.apache.org/docs/current/mod/mod_rewrite.html

编辑:当然这适用于在 apache 网络服务器上运行的代码。其他 Web 服务器(例如 IIS)可能也有类似的模块。

另外,请注意 mod_rewrite 超出了 php.ini 的范围。相反,它实际上是 apache 服务器指令,甚至在 php 发挥作用之前就被调用。

于 2012-08-15T15:20:48.543 回答
1

我目前正在开发一个针对极高性能的 php 路由器。你可能想看看:

https://github.com/c9s/Pux

Pux 在静态路由调度方面比 symfony 路由器快 48.5 倍,在正则表达式调度方面快 31 倍。(安装了 pux 扩展)

Pux 尽量不消耗计算时间来动态构建所有路由(如 Symfony/Routing)。相反,Pux 将您的路由编译为普通的 PHP 数组进行缓存,编译后的路由可以非常快速地从缓存中加载。

借助 Pux PHP 扩展支持,您可以比纯 PHP Pux 快 1.5~2 倍地加载和调度路由。

于 2014-01-09T07:03:27.730 回答