【问题标题】:How can I create a URL rewrite similar to Wordpress in my own PHP app如何在我自己的 PHP 应用程序中创建类似于 Wordpress 的 URL 重写
【发布时间】:2011-11-19 01:10:11
【问题描述】:

我在 Windows 2008R2 上使用 PHP5.3.6。

在 Wordpress 中,我可以设置各种友好的 URL,最终路由到一个 PHP 页面。从外面看,它看起来像很多页,但只有一个。

在 web.config 文件(或 .htaccess)文件中,只有一条指令,而不是每页/文章有一个条目。

这意味着 PHP 在某处查看 URL,将其与数据库(文章标题所在的位置)进行比较,然后透明地路由到页面。

所有这些对最终用户都是透明的。

这是如何在非 wordpress PHP 网站中完成的?

【问题讨论】:

    标签: php iis-7 iis-7.5 php-5.3


    【解决方案1】:

    这是一个related answer,它涉及如何做到这一点。简而言之,您需要检查 $_SERVER['REQUEST_URI'] 并对其进行解析。

    这是一个解析请求的简单示例(MVC 路由器通常是可配置的,并且可以路由和匹配许多不同的 URI 结构):

    如果您的格式类似于news/article-slig,您可以这样做(示例代码,没有那么严格的方法):

    list($section, $slug) = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
    

    此时您的 PHP 脚本知道如何解释请求。如果这是一个成熟的 MVC 应用程序,路由器将加载匹配的控制器并将请求数据传递给它。如果你只是在做一个简单的单页脚本,加载一些数据,那么你的数据库调用就会随之而来。

    如果请求无效,那么简单的header()调用就可以通知浏览器:

    header('HTTP/1.0 404 Not Found');
    

    任何数据输出都将是您的 404 页面的内容。

    【讨论】:

    • 太棒了。谢谢。然后我不需要为成功发出 200 或为找不到页面发出 404 吗?如果是这种情况,我如何将其发送到浏览器?
    【解决方案2】:

    我不能保证 wordpress,我使用的一种方法是将 .htaccess 中的 404 重定向到 index.php,然后通过解析对该文件进行排序:

    $sub = $_SERVER['SERVER_NAME']; 
    $file = $_SERVER['REQUEST_URI'];
    

    $sub 可用于将不存在的子域屏蔽到特定文件。 $file 可以在 switch 或 if 子句中使用,以根据文件名包含/重定向。

    显然,您需要确保别名不是您的文档根目录中的实际文件。

    【讨论】:

    • 这对搜索引擎来说会是 404 吗?请参阅我上面的评论。
    • 它看起来不像浏览器的 404,但是,设置 mod_rewrite 以匹配特定的 URI 集同样容易。例如:/page/*
    【解决方案3】:

    它被称为路由(您也可以查看有关前端控制器模式的信息)。您可以通过使用服务器设置将所有请求重定向到单个文件并在此文件中解析请求来编写自己的实现。例如,您还可以查看 Zend_Controller_Router 文档和资源以了解其工作原理。

    http://framework.zend.com/manual/en/zend.controller.router.html

    http://framework.zend.com/manual/en/zend.controller.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多