我正在编写自己的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]
感谢您的帮助......
答案 0 :(得分:2)
这是你的css / images等中相对链接的问题。通过在当前页面路径的父文件夹中添加相对路径来解决相对路径。
要解决此问题,您可以在页面的HTML <head>
部分添加此内容:
<base href="/myapp/public/" />
以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。
答案 1 :(得分:0)
在我看来,它的工作方式应该如此。相对路径始终相对于当前位置。我认为绝对路径是你最好的选择。您可以为BASE_DIR等基本目录使用常量,并使所有内容路径相对于该目录。