【问题标题】:Request to another page - Realise with header() or include?请求另一个页面 - 使用 header() 或包含实现?
【发布时间】:2014-08-14 19:58:32
【问题描述】:

在我的项目中,我使用的是干净的 URL,所有请求都将转发到 index.php。 在 index.php 中,我有一个 routing-aprt,它检查 switch/case-construct 中的 URL 参数并包含相应的站点。

但是是否包含正确的工具?或者我应该为此使用 header() 吗?

【问题讨论】:

  • include 通常用于将另一个脚本合并为当前脚本的一部分,而不是完全替代。另一方面,如果您使用重定向,则新 URL 对用户可见。

标签: php header include request


【解决方案1】:

使用include 根据 URL 有条件地运行 PHP 代码。 header 用于响应的内容,例如将用户发送到另一个 URL。

在最基本的层面上,您可以在 index.php 中使用路由实现 such as this

if ($_GET['q']) {
  // Break the request into it's path parts
  $path_parts = explode('/', $_GET['q']);
  $section = $path_parts[0];
}
else {
  $section = 'home';
}

switch ($section) {
  case 'home':
    // For requests to the home page
    require('home.html');
  case 'about':
    // For URLs like http://www.example.com/about
    require('about.html');
    break;
  case 'login':
    if (check_login()) {
        header('Location: http://www.example.com/');
    }
    else {
        require('login.html');
    }
    break;
  case 'wiki':
    // For URLs like http://www.example.com/wiki/Document
    $page = empty($path_parts[1]) ? '' : $path_parts[1];
    require('wiki.php');
    break;
  default:
    // Unexpected page requests should get a 404
    header("HTTP/1.0 404 Not Found");
    include('error.html');
    break;
}

【讨论】:

  • 是的,但是如果我在您的示例中使用了“登录”的情况,那么控制器通常会调用类似 checkLogin() 的方法。如果登录成功,则用户应转发到(例如)主站点。为此,您再次使用 include()。这就是问题所在:如果您被转发到主站点,您的 URL 中仍然有 Login-URL....
  • 为了在“/login”之后进行重定向,您设置标头以将用户重定向到主页(例如“/”)。现在,下一个请求的 URL 不同,并且路由回家。我已经更新了我的代码作为示例。
  • 但是 header() 不能使用,如果我已经发布了 HTML 代码(我通过显示登录页面来完成)。
  • 请仔细准备我的代码。登录检查(例如读取 POST 数据和检查数据库)在输出任何 HTML 之前完成。在您将任何内容输出回用户之前,用户会被重定向。更具体地说,登录 HTML 在初始 GET 请求期间显示。在表单的 POST 期间,您检查并重定向它是否良好。
【解决方案2】:

我建议您使用一些简单的路由类,该类将根据您的 url + 自动加载器加载控制器以包含控制器类。

【讨论】:

    【解决方案3】:

    header 用于操作原始 http 标头。 IE。 header("位置:http://www.google.com")

    include 用于包含和评估特定文件。换句话说,包含文件中的变量和函数此时可供应用程序使用。

    所以,我相信你会想要包含你的意图。如果我理解正确的话。

    【讨论】:

      【解决方案4】:

      转发页面链接使用这个

      <?php 
      
      header("location:index.php");
      
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-21
        • 2012-01-03
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        相关资源
        最近更新 更多