Способ избежать использования псевдонима Apache для включения HTML-ресурсов, таких как CSS
Здесь возникает вопрос, потому что мое текущее решение на самом деле не удовлетворяет меня для следующей проблемы:
У меня есть собственная PHP-структура с шаблоном MVC в разработке. И мой Маршрутизатор работает отлично, и у меня есть один вопрос, на который я не мог найти решение.
Ну, я направляю каждый входящий запрос в файл index.php, который находится в базовом пути моей рамки. Конечно, не стоит работать с относительными путями при включении css, например:
<link rel="stylesheet" type="text/css" href="style/include/css/style.css" />
Это прекрасно работает в браузере. Конечно, не имеет значения, что я вхожу в URL-адрес, потому что каждый запрос перенаправляется, как указано выше, в индекс, чтобы сделать разумную маршрутизацию возможной.
Однако, когда мой url содержит несколько слэшей, которые выглядят как подпапки, например: "/manual/details/1_2", я получаю обычный процесс маршрутизации, но браузер не может найти файл css, если я не добавлю "../" для каждый "/" в моем URL-адресе, чтобы вернуться назад к базовому пути.
Например, для вышеуказанного URL это будет работать вместо:
<link rel="stylesheet" type="text/css" href="../../style/include/css/style.css" />
Мое текущее решение:
Я написал функцию PHP в классе Routing, которая определяет требуемое количество шаблона "../", и я всегда выполняю функцию перед реализацией ресурса для создания точного
путь в любое время.
Пример:
<link rel="stylesheet" type="text/css" href="<?=Router::getInstance()->getSubdirectoryPrefix()?>style/include/css/style.css" />
Излишне говорить, что это очень неудобно, а также отстой, если вы забыли разместить эту функцию. Если ваш маршрут когда-либо изменился или вы забыли, что находитесь в подкаталоге, вы задаетесь вопросом, почему ваш ресурс не найден.
Я также знаю о размещении псевдонима, такого как Alias /public style/в моей конфигурации виртуального хоста Apache, но я хочу найти другой - внутренний проект и внутренний PHP, не имея необузданного дерьма, такого как вставка функции псевдонима все времени и без настройки виртуального хоста, чтобы структура могла оставаться легкой и не требовала каких-либо неприятных внешних параметров, таких как изменение Virtual-Host.
Мне бы хотелось услышать ваши решения, лучше всего было бы .htacces - о, и, говоря об этом, я оставляю здесь свой код .htaccess:
RewriteEngine On
Options -Indexes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]
Заранее благодарим за помощь ~
Ответы
Ответ 1
Вы должны использовать абсолютные пути вместо относительных путей для ваших html-ссылок (css, javascript, images и т.д.).
Например:
<link rel="stylesheet" type="text/css" href="/style/include/css/style.css" />
Ведущая косая черта (до style
) означает начало из корневой папки документа, затем перейдите в папку style
и так далее... (у вас может быть другой префиксный каталог, если он не находится в корневой папке)
У вас были некоторые проблемы, потому что некоторые из ваших правил могут создавать виртуальные каталоги (например: http://domain.com/some/directory/subdirectory/etc/
).
Кроме того, в вашем htaccess не помешает использовать косую черту (или RewriteBase
)
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /index.php [L]
или (оба одинаковы)
Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]