Можно ли использовать ресурсы (такие как таблицы стилей CSS и изображения), которые перенаправляются одним и тем же доменом / хостом? - PullRequest
0 голосов
/ 24 марта 2011

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

/root/content/theme/

В каталоге /root/ находится файл index.php.Например, статический HTML-файл index.html находится внутри подкаталога /root/content/theme/.С помощью модуля перезаписи Apache при каждом посещении http://root.com/index.html он будет включать /index.html из подкаталога /root/content/theme/, поэтому, как мне кажется, я получаю доступ к /index.html.Теперь проблема в том, что, хотя /index.html загружен, но ресурсы, такие как изображения и таблицы стилей (все URL являются относительными), не будут загружены должным образом.Мое решение для этого состоит в том, чтобы использовать перенаправления.

Все запросы страницы должны были бы быть отфильтрованы в /index.php (конечно, те, которые на самом деле не существуют на сервере, поскольку он поддерживается mod_rewrite).Если ресурс изображения должен быть запрошен с сервера, например "style/images/bg.png", так как это относительный URL, это означает, что он запрашивает "http://root.com/style/images/bg.png".Конечно, эта страница не существует, потому что настоящий bg.png существует в "http://root.com/content/theme/style/images/bg.png".Поэтому всякий раз, когда index.php обнаруживает, что запрашивается ресурс в /root/content/theme/, его просто нужно перенаправить на "http://root.com/content/theme/style/images/bg.png".

Это решение работает нормально, но меня беспокоит, еслиэто требует большей нагрузки на сервер и не рекомендуется, так как каждый ресурс в /root/content/theme/ должен быть перенаправлен из корня.

Я думал, что это не будет иметь большого значениятак много, так как большинство браузеров имеют кеш-систему.Как вы думаете?

Кстати, я использую относительные URL для ресурсов, потому что я хотел, чтобы приложение было максимально гибким (например, когда мне нужно было перенести мои файлы в другой домен)

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

Это обычная проблема, и она не решаема без особых усилий.HTML, однако, предлагает простой обходной путь, а именно <base href=...>.

. Он может помочь в использовании преимущественно относительных путей и избежать микроуправления перенаправлениями.Я не совсем уверен в вашем случае (структуры каталогов всегда трудно представить без блестящего древовидного представления), но его проще всего использовать из любого шаблона PHP:

<base href="<?=htmlspecialchars("//$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", ENT_QUOTES, "UTF-8")?>" />

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

0 голосов
/ 24 марта 2011

Я думаю, что я нашел лучшее решение для этого, также используя RewriteModule

RewriteCond %{DOCUMENT_ROOT}/content/theme/$1 -f
RewriteRule ^(.*)$ /content/theme/$1 [QSA,L]

Поскольку, когда я перенаправляю через index.php, он должен сначала проверить, существует ли файл, это может занять большезагрузка сервера, потому что PHP все еще анализируется .. Вышеуказанные строки .htaccess будут делать то же решение, но на этот раз намного быстрее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...