获取 switch 语句的站点 url

Get site uri for switch statment

如何获取 switch 语句的 URL 路径?我试过 $_SERVER['REQUEST_URI'] 但无法正常工作。示例:

$aPage = 'app/views/home.php';
            switch($_SERVER['REQUEST_URI'])
            {
                case "home":
                    $aPage = "app/views/home.php";
                    break;

                case "how":
                    $aPage = "app/views/how.php";
                    break;

            }

            return $aPage;

所以在 root 上显示:$aPage = 'app/views/home.php(确实如此)

如果 url 是 http://localhost/how/ 它将 return $aPage = "app/views/how.php"

现在我收到 404 The requested URL /how/ was not found on this server.

问题是您随后导航到 http://localhost/how/ URL,它只是试图在标记为 "how" 的服务器上查找目录,但没有找到。这称为路由,通常使用重写规则处理。这是基本思想:

  • 用户在没有查询字符串的情况下点击您的 index.php 文件并获得默认文件。通常,您的服务器不会在地址栏中显示 index.php,因为它只会加载任何标记为 "index".
  • 的文件
  • 加载新模板时,将其作为查询字符串参数附加。像 http://localhost.com/?view=how
  • 在您的 PHP 文件中,您可以使用 $_GET 变量获取该变量并执行您的逻辑(包括文件、修改输出等)

然后您需要在服务器端添加重写规则。对于 apache,这是通过在服务器的根目录中添加一个标记为 .htaccess 的文件来完成的。在该文件中添加:

RewriteEngine On
RewriteRule ^([^/d]+)/?$ index.php?view= [QSA]

这将获取 URL 并对其进行更新,使其在地址栏中看起来像 http://localhost/how/,但被 PHP 解释为在您的 main 上有一个查询字符串参数索引文件。至于您的 switch 语句,它将变为如下所示:

$aPage = 'app/views/home.php';
switch( $_GET['view'] ) {
    case "home":
        $aPage = "app/views/home.php";
        break;
    case "how":
        $aPage = "app/views/how.php";
        break;
}

return $aPage;

虽然让你的函数逻辑更像这样可能更容易:

$route = $_GET['view'] ? $_GET['view'] : 'home'; // if view exists set it, if not default to 'home'
$validRoutes = array('home', 'how'); // array of acceptable routes

if( in_array( $route, $validRoutes ) ) {
    return sprintf('app/views/%s', $route);
}

return false; // return false if invalid