【发布时间】: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