PHP MVC应用程序丢失了指向jss和css文件的路径引用


PHP MVC Application loosing path references to jss and css files

我正在写我自己的PHP MVC框架。因此,引导的入口点在myapp/public/index.php

检查传入的URL,如:

$url = $_GET["url"];

然后我展开代码,找到必要的控制器,动作和参数来导航:

    $parts = explode("/", trim($url, "/"));
    if (sizeof($parts) > 0)
    {
        $controller = $parts[0];
        if (sizeof($parts) >= 2)
        {
            $action = $parts[1];
            $parameters = array_slice($parts, 2);
        }
    }

代码从这里加载并运行控制器和视图。

在控制器,我需要(成功登录后)重定向到我的应用程序主页(称为main/index)。下面是重定向代码:

... controller code...
$this->redirect("main", "index");
...

public static function redirect($controller, $method = "index", $args = array())
{
    $location = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] . $controller . "/" . $method . "/" . implode("/",$args);
    header("Location: " . $location);
    exit;
}

好吧,这再次调用我的public/index.php,但从现在开始,我失去了所有的相对路径引用在包含的javascript和css代码,如:

<link rel="stylesheet" rel="stylesheet" media="all" href="css/bootstrap.min.css">
<script type="text/javascript" charset="UTF-8" src="js/jquery-2.1.4.min.js"></script>

它开始看myapp/pubic/main/index文件夹,而不是看myapp/public,它自然不属于那里。

另外,myapp/public/main/index甚至不是一个有效的文件夹(控制器和动作代码在application/controllers文件夹下)。

我对这种重定向机制的工作方式感到非常困惑,我找不到解决方案。

我的.htaccess,位于myapp'public:

Options -indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^([a-zA-Z0-9'/'-_]+)'.?([a-zA-Z]+)?$ index.php?url=$1&extension=$2 [QSA,L]

感谢帮助....

这是css/images等中的相对链接的问题。通过在当前页面路径的父文件夹中添加相对路径来解析相对路径。

要解决这个问题,您可以将其添加到页面HTML的<head>部分:

<base href="/myapp/public/" />

使每个相对URL都从该基础URL解析,而不是从当前页面的URL解析。

在我看来,它的工作方式应该。相对路径总是相对于当前位置。我认为绝对路径是最好的选择。您可以为您的基本目录使用一个常量,如BASE_DIR,并使所有内容路径相对于它。