Показать HTML-контент с помощью PHP (и стиль загрузки)

У меня есть несколько HTML-страниц (в папке «web»), которые используют некоторые стили и сценарии, и мне нужно показать эти HTML-страницы с помощью PHP-скрипта. Вот упрощенная версия кода, который я использую:

<?php

 readfile("web/index.html");

Он работает, но не загружает никаких ресурсов (css, js, изображения), потому что URL-адреса не являются абсолютными:

 <link href = "css/bootstrap.css" rel='stylesheet' type='text/css' />
 <link href = "css/style.css" rel='stylesheet' type='text/css' />

Он не находит ресурсы, потому что ищет папку css в той же папке, что и PHP-скрипт.

Любое обходное решение для этого?

URL-адреса, используемые для css, js и изображений, не обязательно должны быть абсолютными. На самом деле вы бы хотели, чтобы они были относительными, так как в будущем будет проще перенести ваш сайт на другой домен. Что касается вашей проблемы, я предлагаю просто исправить относительный путь, чтобы он больше не находился в той же папке, что и ваш PHP-скрипт.

Mathyn 15.03.2019 10:29

@Mathyn Проблема в том, что у меня есть сотни HTML-страниц, и я предпочитаю их не менять. и каждый HTML имеет разные ресурсы, поэтому я не могу просто перенести эти папки в корневую папку, поскольку они имеют одинаковые имена.

Badr 15.03.2019 10:38

Ах, правильно, хороший момент. Я думаю, что ответ @Uwe Ohse может помочь!

Mathyn 15.03.2019 10:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
84
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно добавить добавить <base href='...'> в html, например (не проверено):

$page_content=preg_replace("%</head%i","<base href='web/'></head",$page_content);

вставьте это после readfile. См. Веб-документы MDN для получения дополнительной информации об этом теге.

В некоторых браузерах (по крайней мере, Firefox и Edge) это также работает, если вы печатаете базовый тег перед выводом $page_content. Это грязно, но, может быть, это достаточно хорошо.

Это работает, Спасибо! Если у кого-то есть более чистый способ, пожалуйста, дайте мне знать :)

Badr 15.03.2019 11:02

Просто вы можете использовать что-то вроде этого

index.php

<html>
 <head>
  <php include("menu.php"); ?>
 </head>
<body>

</body>
</html>

меню.php

<link href = "css/bootstrap.css" rel='stylesheet' type='text/css' />
<link href = "css/style.css" rel='stylesheet' type='text/css' />

для базового пути используйте некоторую переменную, например $base = "http://localhost", затем используйте свои элементы, например <img scr = "<?php $base ?>/images/myimage.jpg" />

Надеюсь, что это ответ на ваш вопрос

Другие вопросы по теме