Здесь возникает вопрос, потому что мое текущее решение на самом деле не удовлетворяет меня для следующей проблемы:
У меня есть собственная PHP Framework с шаблоном MVC в разработке. И мой Router работает отлично, и у меня есть один вопрос, на который я не мог найти решение.
Ну, я направляю каждый входящий запрос в файл 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]
Спасибо заранее за вашу помощь ~
Вы должны использовать абсолютные пути вместо относительных путей для ваших 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]