PHP:将URL路由到静态页面/资源

时间:2019-01-24 16:57:27

标签: php design-patterns url-routing

我正在尝试使用松散遵循的MVC设计模式链接到静态页面时的最佳方法。

我首先将所有请求重写为index.php,以处理所有请求并将其分解为控制器,操作和参数的URL。但是,如果我不想遵循此url结构,而只想访问诸如“ http://example.com/home/”之类的静态页面而不必调用某些操作,我将如何实现此目的而又不会收到由路由器/引起的php错误调度程序试图请求一个不存在的文件?

我考虑过设置如下所示的switch语句或if语句,该语句检查url是否设置为某些内容,然后使用自定义的控制器和操作,或者我不确定是否要从中取出静态资源MVC目录并将其分开并以这种方式链接到它?

<?php

class Router
{

    static public function parse($url, $request)
    {
        $url = trim($url);

        if ($url == "/")
        {
            $request->controller = "tasks";
            $request->action = "index";
            $request->params = [];
        }
        else
        {
            $explode_url = explode('/', $url);
            $explode_url = array_slice($explode_url, 2);
            $request->controller = $explode_url[0];
            $request->action = $explode_url[1];
            $request->params = array_slice($explode_url, 2);
        }

    }
}
?>

这可行,但是我不想为很多不同的静态资源设置一个庞大的路由器,因为它感觉很俗气,而且我只是将代码拼凑在一起。将静态页面放在MVC之外的自己的目录中并在视图中链接到它们是否是有效的选择?我是MVC的新手,所以任何指导都很棒。

1 个答案:

答案 0 :(得分:1)

您的应用程序不应收到不应处理的请求,您可以在网络服务器级别解决此问题: 例如,如果您使用的是Apache,则可以在.htaccess文件中设置仅当请求的资源不存在时,才应将请求定向到前端控制器(例如:index.php)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L]