获取交换机声明的网站uri

时间:2016-04-14 20:22:43

标签: php uri

如何获取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(它确实如此)

如果网址为http://localhost/how/,则会返回$aPage = "app/views/how.php"

现在我收到了404请求的URL /在这台服务器上找不到/的方式。

1 个答案:

答案 0 :(得分:0)

问题是您正在导航到http://localhost/how/ URL,它只是试图在服务器上找到一个标有&#34的目录;如何"而没有找到它。这称为路由,通常使用重写规则进行处理。这是基本的想法:

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

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

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

这将获取该URL并更新它,使其在地址栏中看起来像http://localhost/how/,但由PHP解释为在主索引文件上有一个查询字符串参数。至于你的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
相关问题