Приложение PHP MVC теряет ссылки на пути к файлам jss и css

1

Я пишу свою собственную фреймворк 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]

Спасибо за помощь....

Теги:
model-view-controller
.htaccess
mod-rewrite

2 ответа

2
Лучший ответ

Это проблема с относительными ссылками в ваших css/изображениях и т.д. Относительные пути разрешаются путем добавления относительного пути в родительскую папку текущего пути к странице.

Чтобы решить проблему, вы можете добавить это в раздел <head> страницы HTML:

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

так что каждый относительный URL-адрес будет удален из этого базового URL-адреса, а не из текущего URL-адреса страницы.

0

Мне кажется, что он работает так, как должен. Относительные пути всегда будут относиться к текущему местоположению. Я думаю, что абсолютные пути будут вашим лучшим выбором. Вы можете использовать константу для своего базового каталога, такого как BASE_DIR, и сделать все свои пути контента относительно этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню