Я пишу свою собственную фреймворк 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]
Спасибо за помощь….