Доброго времени суток! Есть сайт на самописной MVC (для себя – через велосипед понять проще). .htaccess в корне выглядит так: Код (Text): <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.php [L] </IfModule> Router.php примерно так: Код (Text): class Router { static function run() { // parse URI $routes = explode('/', $_SERVER['REQUEST_URI']); // get mvc values or default $name = $model_name = $view_name = $controller_name = (!empty($routes['2'])) ? $routes['2'] : 'Main'; $action_name = (!empty($routes['3'])) ? $routes['3'] : 'index'; $name = strtolower($name); // set mvc classnames $model_name = 'Model_'.$model_name; $controller_name = 'Controller_'.$controller_name; $action_name = 'action_'.$action_name; $view_name = 'View_'.$view_name; // set mvc filenames $model_file = strtolower('core/model/'.$model_name.'.php'); $controller_file = strtolower('core/controller/'.$controller_name.'.php'); $view_file = strtolower('core/view/'.$view_name); // including files if (file_exists($model_file)) require_once $model_file; else self::err404(); if (file_exists($view_file.'.php')) require_once $view_file.'.php'; else self::err404(); if (file_exists($controller_file)) require_once $controller_file; else self::err404(); // create controller $controller = new $controller_name($name); if (method_exists($controller, $action_name)) $controller->$action_name($name); else self::err404(); } static function err404() { header('HTTP/1.1 404 Not Found'); header(' ', true, 404); header('Location: http://'.$_SERVER['HTTP_HOST'].'/example/404.html'); die(); } } А все остальные элементы прописаны относительными путями: Код (Text): <link rel="stylesheet" href="css/normalize.min.css"/> Всё хорошо пока я брожу по ссылкам http://localhost:8888/example и http://localhost:8888/example/page/. Но когда перехожу на http://localhost:8888/example/page/action, то эти относительные ссылки ломаются (становятся вида http://localhost:8888/example/page/css/normalize.min.css, а мне нужно всё то же http://localhost:8888/example/css/normalize.min.css). Если вставлять ссылки вот так: Код (Text): <link rel="stylesheet" href="<?php echo 'http://'.$_SERVER['HTTP_HOST'].'/example/'; ?>css/normalize.min.css"/> , то всё работает, но есть ли какой-нибудь более адекватный способ? Или хотя бы как автоматизировать добавление к каждой ссылке этого кода чтобы не писать вручную? Спасибо! UPD (решение): использую Код (Text): <base href="http://<?php echo $_SERVER['HTTP_HOST'] ?>"> .
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн указывайте всегда относительную ссылку и все дела.
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн Я и указывал относительную, но косячит. В коде так: Код (Text): <link href="css/style.css"/> Пример №1: Страница: http://localhost:8888/example/page Стиль грузится отсюда: http://localhost:8888/example/css/style.css Пример №2: Страница: http://localhost:8888/example/page/action Стиль пытается загрузиться отсюда: http://localhost:8888/example/page/css/style.css То бишь, несмотря на то, что точка входа у меня одна (http://localhost:8888/example/index.php), при переходе "вглубь" изменяется и путь к текущей директории (которой, кстати, даже не существует). Как это исправить? Как сделать так, чтобы даже при переходе, например, сюда http://localhost:8888/example/page/subpage/action/someaction/smthgelse относительные ссылки были относительно index.php в корне?
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн относительную от корня сайта а не текущего документа
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн Столкнулся с подобной проблемой при индексацией дядкой гуглом своего блога =). допустим есть раздел http://site/coding/ Все ссылки, которые начинались не с / индексировались как подпапки к coding/ в итоге имея ссылку coding/ололо гугл шел на http://site/coding/coding/ололо
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн На хостинге: http://example.com/index.php На ноуте: http://localhost:8888/example/index.php То бишь, если писать href="/css/style.css", то оно будет работать только на хосте. А как работать с одним и тем же сайтом без тотального изменения "/css/style.css" на "/example/css/style.css"? Переносить всё в корень локалхоста очень неудобно ибо там ведь несколько сайтов могут быть.
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн можно еще base указать, раз такие сложности с относительными ссылками от корня сайта
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн Я лично для этого делаю отдельную константу и делаю путь до папки с шаблонами и шаблоном который выбран в данный момент... После этого уже использую константу...
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн Можешь виртуальные хосты для сайтов делать. И в файле hosts прописывать для этих адресов IP локалхоста.
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн Про тег base даже и не знал, спасибо за новую информацию! Сервер ставить, честно говоря, лениво ради такой задачи – в hosts напишу путь, да, спасибо!
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн один-два раза прописать в hosts - прописывайте. больше - dns как раз была изобретена для распространения изменения в файлах hosts. все от задачи зависит. у кого не один клиент - задумается о том как удобно доставлять инфу до них. не каждый бухгалтер имеет разрешение на редактирование hosts. у кого не один сервер - dns проще делегирование организует. у кого еще и несколько подсетей... короче, все от задачи зависит, да
Re: Как писать ссылки с учётом действий в MVC? (подробнее вн Спасибо за подробное объяснение! Видимо, это не для моей задачи - мне нужно просто редактировать сайт на локалхосте и заливать на хостер с минимальными усилиями поэтому hosts вполне подойдёт.