【问题标题】:PHP MVC Application loosing path references to jss and css filesPHP MVC 应用程序丢失对 jss 和 css 文件的路径引用
【发布时间】:2015-08-28 05:23:00
【问题描述】:

我正在编写自己的 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]

感谢您的帮助....

【问题讨论】:

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


    【解决方案1】:

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

    要解决此问题,您可以将其添加到页面 HTML 的 &lt;head&gt; 部分:

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

    这样每个相对 URL 都是从该基本 URL 而非当前页面的 URL 解析的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-09-10
        • 1970-01-01
        • 2012-01-22
        • 1970-01-01
        • 2019-04-21
        • 2011-04-23
        • 1970-01-01
        • 2017-12-19
        • 2013-12-20
        相关资源
        最近更新 更多