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

时间:2015-08-27 19:31:07

标签: php apache .htaccess mod-rewrite model-view-controller

我正在编写自己的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/public时,它开始查看myapp/pubic/main/index文件夹,它本身不属于该文件夹。

此外,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]

感谢您的帮助......

2 个答案:

答案 0 :(得分:2)

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

要解决此问题,您可以在页面的HTML <head>部分添加此内容:

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

以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。

答案 1 :(得分:0)

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