2012-08-15 66 views
3

我需要知道执行站点导航的术语和最佳做法“正确”吗?这样,类似于如何计算器的路线,当你通过URL问一个问题:用PHP以正确的方式路由页面请求

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

凡与我的PHP编程知识我可能会代码它像这样:

“http://stackoverflow.com/index.php?p=questions &行为=问”

希望你明白我的意思。我想知道这种页面导航和请求/响应处理方法的术语,以及如果可能的话,使用此标准/方法设计Web应用程序时需要记住的最佳做法,限制或其他任何事项。我甚至不知道这是否全部用PHP或一些用ASP或Ruby编码的Web后端完成,或者你有什么,所以我已经用我的猜测填充了标签。

+1

这一切都可能在PHP!我建议使用像Zend,CakePHP,CodeIgniter或其他任何框架!他们都提供了拥有漂亮的URL和生根类的途径。 – 2012-08-15 15:17:46

+7

不错的胡子,user1600933。 – 2012-08-15 15:18:44

+1

通常使用mod_rewerite来提供那种相当丑陋的url内容。 – 2012-08-15 15:19:13

回答

8

大多数MVC框架使用的模式是调用路由器的front controller。前端控制器通常是您网站根目录中的index.php。接下来,所有不存在现有文件(如js,css和图像资产)的请求都需要发送到此控制器。如果这就是你使用的是什么

FallbackResource index.php 

IIS has similar functionality:在Apache中,你可以用mod_rewrite做到这一点:

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

然而,阿帕奇2.5的推荐方法是FallbackResource

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

require '../router.php'; 

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

然后您的路由器可以找到适当的控制器来路由请求。详细了解MVC framework,并研究someexamples以更好地了解他人如何实施它。

2

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

允许您呈现这种URL的机制称为MOD重写。它使用URL中变量的组合以及正则表达式以更友好的方式将URL重新呈现给最终用户。

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

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

另外,请注意,mod_rewrite不在php的范围之内。它实际上是Apache服务器指令,它在PHP开始使用之前被调用。

+0

感谢您的回答,这正是我一直在寻找的。 – looter 2012-08-15 15:32:02

1

我目前正在开发一个php路由器,它的目标是极高性能。你或许可能要看一看:

https://github.com/c9s/Pux

PUX为48.5x快于静态路由调度symfony的路由器,31X更快的正则表达式调度。 (安装了pux扩展)

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

使用Pux PHP Extension支持,您可以加载和发送比纯PHP Pux快1.5〜2倍的路径。

+0

请问您可以添加一个pageNOtfound的例子吗? – 2015-11-09 17:27:23