我在Windows 2008R2上使用PHP5.3.6。
在Wordpress中,我可以设置各种友好的url,最终路由到一个PHP页面。从外面看,它看起来像许多页,但实际上只有一个。
在网上。配置文件(或.htaccess)文件,只有一条指令,而不是每页/文章有一个条目。
这意味着PHP正在某个地方查看URL,将其与数据库(文章标题存在的地方)进行比较,然后透明地路由到该页面。
所有这些对最终用户都是透明的。
如何在非wordpress PHP站点中实现这一点?
这里有一个相关的答案,涉及如何做到这一点。简而言之,您需要检查$_SERVER['REQUEST_URI']
并解析它。
如果你的格式是类似news/article-slig
的东西,你可以这样做(示例代码,有不那么严格的方法来做到这一点):
list($section, $slug) = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
此时,您的PHP脚本知道如何解释请求。如果这是一个完整的MVC应用程序,路由器将加载匹配的控制器并将请求数据传递给它。如果你只是做一个简单的单页脚本,加载一些数据,那么你的DB调用将跟随。
如果请求无效,那么一个简单的header()
调用可以通知浏览器:
header('HTTP/1.0 404 Not Found');
所有的数据输出都是404页面的内容
我不能保证wordpress,我使用的一种方法是将。htaccess中的404重定向到index。php然后通过解析进行文件排序:
$sub = $_SERVER['SERVER_NAME'];
$file = $_SERVER['REQUEST_URI'];
$sub
可用于将不存在的子域屏蔽到特定文件。$file
可以在switch或if子句中使用,以包含基于文件名的/redirect。
显然,您需要确保别名'不是doc根目录下的实际文件。
它被称为Routing(你也可以查看有关Front Controller模式的信息)。您可以通过使用服务器设置将所有请求重定向到单个文件来编写自己的实现,并在该文件中解析请求。你也可以检查,例如,Zend_Controller_Router文档和源代码来了解它是如何工作的。
http://framework.zend.com/manual/en/zend.controller.router.html http://framework.zend.com/manual/en/zend.controller.html