Способ избежать использования псевдонима 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]