Перейти к содержимому

Фото
- - - - -

Помогите с mod_rewrite


  • Вы не можете создать новую тему
  • Please log in to reply
15 ответов в этой теме

#1 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 22 Февраль 2011 - 12:00

Доброе утро, Страна!

Надо сделать так, чтобы когда я вызываю любой существующий .html-файл (неважно напрямую или index.html через directory index), Apache отправлял меня на заготовленный .php-файл, который будет дальше колдовать с этим .html-файлом. Ожидаю, что это какое то хитроумное правило в .htaccess, но если будут другие предложения было бы даже веселей.

Заранее благодарю за вашу помощь и желание разобраться с этой, наверное, тривиальной проблемой!

Илья
  • 0

#2 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 22 Февраль 2011 - 15:07

Так на лету никто тебе не напишет нужное решение, это достаточно трудоёмкая работы и индивидуальна для каждой системы.
Зачем извращаться с обратным порядком? (сначала хтмл, потом пхп) Есть уже нормальные велосипеды, где вызов и подгрузка файлов идёт из единого индекса, с помощью ГЕТов. Каким образом ты себе представляешь, чтобы ХТМЛ(!) файл вызывал серверный пхп? :)
Надо делать приёмный файл, который уже будет пересылать из любого файла в нужный, забирая твои опции из реквестного урла.

Если не использовать мод_реврайт, то остаётся старый вариант с кастомной 404 страницей, но это решение не очень тебе подходит.
Вот тебе ссылки, почитай, подумай: нужен ли тебе такой велосипед.
http://mysitez.km.ua...thoutmodrewrite - примитивно.
http://www.opennet.r...US/mod_rewrite/ - развёрнуто.
http://www.webmaster...orum92/4332.htm - более менее.
http://articles.site...ewrite-examples - неплохо, для начинающих.

Удачи, как писал уже кто-то: "Mod_rewrite это вуду, но очень замечательное."

Сообщение изменено: Isamashii Tora (22 Февраль 2011 - 15:09 )

  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#3 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 22 Февраль 2011 - 16:06

Благодарю за перечень ссылок, особенно если это не первые попавшиеся ссылки с гугла, а уже прочитанные самостоятельно статьи, рекомендуемые лично к прочтению. Чтением займусь вечером.

На лету, конечно, не напишешь, я поэтому и обращаюсь к глубокоуважаемой публике, быть может у кого то есть пара съеденных собак на эту тему.

Велосипед такой нужен для эксперимента, суть которого заключается в том, чтобы брать исходный .html-файл и преобразовывать его в видоизмененный .html-файл посредством XSLT.

Сейчас это работает напрямую:
http://www.ilja.ee/+/ (или http://www.ilja.ee/+/index.html) преобразуется в http://www.ilja.ee/+/index.php через http://www.ilja.ee/+/i.xsl

Идея состоит в том, чтобы самому себе облегчить написание и обновление страниц. Думаю эта часть очень спорная и я готов подискутировать, если, конечно, имеется желание.
  • 0

#4 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 22 Февраль 2011 - 18:02

Ilja Kumlander, у меня на каждую из твоих ссылок открывает "разный" контент. Что у тебя там преобразует? :)
Первая - просто нет кодировки, в итоге крякозябры. Вторая уже стабильнее, видна чрезвычайно ёмкая фраза. Третий добавил "копирайт". Четвёртая просто хсл файл.

Просто опиши свою мысль подробнее. Чем твоя идея удобнее чем уже существующие связки пхп-мыскля, пхп-хмл, пхп-хтмл? :)
Во всех случаях изменение страницы происходит также удобно, оставляя остальные элементы нетронутыми.
  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#5 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 22 Февраль 2011 - 18:52

Первая и вторая -- это один и тот же хтмл-файл, третий, пхп, именно делает преобразование, добавляя строчку "копирайт" через хсл файл (который четвертый). Прошу прошения за емкую фразу, что первое уж в голову пришло, когда пытался вспомнить как делать хсл-преобразования.

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

Казалось бы, что может быть проще того, чтобы создать хтмл-файл своим любимым текстовым редактором? Это ведь создание чистого контента. Закинь туда же в папку цсс файлы, скрипты да картинки, которые только к этой странице относятся и voila. Остальное сделает главный шаблон: вставит копирайты, меню, общий цсс с жаваскриптом прикрутит.

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

А чем лучше связка xsl-html? Думаю тем, что подальше отделяет шаблоны представления от языка движка сайта.
  • 0

#6 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 22 Февраль 2011 - 19:43

Ilja Kumlander, хорошо, тот пример что ты описал. Чем плох вариант: реализуем основную страницу "индекс" (где упомянутые тобой копирайты, трали-вали, как в принципе и делают, меняется только контент центральный). Если запрос идёт типа www.site.com/pipiska/ - такой директории у нас нет, но с кастомной 404ой страницы преобразовываем адрес и ищем в нужной папке документ pipiska.html
Это конечно грубо и примитивно. Просто не понимаю смысла придумывать велосипед? :) Точно также изменяешь шаблоны и остальное по-необходимости.

Единственную причину видел бы в отсутствии на хостинге возможности использовать базу данных. Ну или у тебя каждая хтмл страницы по-своему реализована, со своим дизайном и другими фенечками, что не позволяет использовать систему "шаблонов".

Да, сейчас можно с помощью хмл заменить базу данных, но насколько это удобнее?
  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#7 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 22 Февраль 2011 - 20:33

Проблема в том, что скорее всего одним pipiska.html (лежащим, скажем, в папке /content/ с кучей других файлов) не обойдешься. Картинки, яваскрипты, кастомные стили, флеш ролики никто не отменял и именно они в реальности доставляют сложность в поиске и обновлении, когда находятся ненаглядно далеко друг от друга.

К слову говоря, с кастомной 404 страницей уже экспериментировал. На подобном принципе я строил свой движок, на котором, к примеру, стоит http://www.huvi.ee/

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

Насчет того, что можно с помощью хмл заменить базу данных. Я пробовал с этим играться, но пока не пришел к однозначному выводу. Для меня пока остается загадкой такие вопросы как манипулирование несколькими хмл файлами имеющими разную структуру или что делать если хмл файл станет слишком большим и что значит большой для хмл файла. Мои эксперименты закончились тем, что я сделал то самое кеширование из базы данных в хмл-файл, который обновляется при изменении в базе данных. Сейчас так работает мое старое портфолио: http://www.nevo.org/ Там (в отличии от huvi.ee) все директории заново сделаны настоящими, в каждой из которых лежит файл с хмл данными и индексовый файл, отсылающий на движок. На том мои эксперименты еще в 2006 году были закончены.

Ну или у тебя каждая хтмл страницы по-своему реализована, со своим дизайном и другими фенечками, что не позволяет использовать систему "шаблонов".

В этом основная мысль. Тем не менее шаблоны все равно нужны. Так или иначе любой сайт имеет общие черты, например, код гугл аналитикс, логотип или меню.
  • 0

#8 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 23 Февраль 2011 - 00:32

Решение вроде бы нашел. В .htaccess теперь у меня написано:

RewriteEngine On
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} .html
RewriteRule (.*) /+/index.php [L]

Файл же /+/index.php вытягивает название .html-файла из переменной $_SERVER['REDIRECT_URL'];

В общем весь мой код этого крутого "движка" умещается в шестнадцати строчках с пробелами:

<?php

$xsl_filename = $_SERVER['DOCUMENT_ROOT']."/+/i.xsl";
$xml_filename = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REDIRECT_URL'];

$xsl = new DOMDocument;
$xslt = new XSLTProcessor();

$xsl->load($xsl_filename);
$xslt->importStyleSheet($xsl);

$xsl->loadHTMLFile($xml_filename);

echo $xslt->transformToXML($xsl);

?>

Проверка http://www.ilja.ee/+/ и http://www.ilja.ee/+/2/
  • 0

#9 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 23 Февраль 2011 - 19:54

Ilja Kumlander, своими силами нашёл решение или мануал какой полезный прочитал? :)
Рад что получилось.
  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#10 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 23 Февраль 2011 - 22:15

Твои ссылки очень помогли, большое спасибо. Я уже как то читал мануал про мод-реврайт, многое выветрилось. Именно там вычитал про переменную SCRIPT_FILENAME, которая наиболее подходит для решения данной задачи.
  • 0

#11 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 23 Февраль 2011 - 23:30

А вот другой вопрос. Можно ли каким нибудь образом загрузить содержимое уже откомпилированного пхп-скрипта, но не через загрузку по хттп? Т.к. я пытаюсь делать преобразования через хлс мне необходимо иметь на руках результат работы пхп, а не сам скрипт.
  • 0

#12 Isamashii Tora

Isamashii Tora

    Странствующий

  • Постоялец
  • 1 840 сообщений
  • Откуда:Asylum

Отправлено 24 Февраль 2011 - 01:34

Ilja Kumlander, хм... ПХП выполняется на стороне сервера, по запросу чего-либо, ты это знаешь. Как вариант cron jobs?
Просто расплывчато объяснил. Ты хочешь чтобы хмл вызывал пхп скрипт? О_о

Сообщение изменено: Isamashii Tora (24 Февраль 2011 - 01:39 )

  • 0
"Миры рождаются и умирают, память о людях с которыми их прошел - остается" © Тристар

#13 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 24 Февраль 2011 - 11:21

Алгоритм такой:
HTTP-запрос (ввод адреса) -> .htaccess отлавливает .html и .php файлы, отправляет их к дежурному .php-файлу -> дежурный .php-файл берет HTML-содержимое файла, на который пришел запрос и пропускает его через xslt-шаблон -> вывод результата на экран

Если с .html-файлом все примерно ясно, то .php-файл загружается как скрипт, а не как уже откомпилированный HTML, а мне надо именно это. Я хочу пропускать через шаблон результат работы файла, а не его PHP-сущность.
  • 0

#14 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 24 Февраль 2011 - 16:49

Решил проблему функцией ob_start()
ob_start();
include($php_filename);
$output = ob_get_contents();
ob_end_clean();

Теперь в переменной $output содержится откомпилированный код. Готовый к обработке HTML, если быть точнее.
  • 0

#15 ZeAN MaVerIcK

ZeAN MaVerIcK
  • Постоялец
  • 979 сообщений
  • Откуда:Temple of Nod at Sarajevo

Отправлено 25 Февраль 2011 - 01:33

Как вариант htaccess.
#charcode table
AddDefaultCharset UTF-8

#link rewrite rules
RewriteEngine On
#RewriteRule $ index.php [nocase,last] или (если цсс в public лежит к примеру)
RewriteRule !(^public/.*)$ index.php [nocase,L]


Переадресует все на 1 файл - index.php . требуется написания uri handler.


+ надо учесть пост выше стоящий тоже.

Сообщение изменено: ZeAN MaVerIcK (25 Февраль 2011 - 01:33 )

  • 0

#16 Ilja Kumlander

Ilja Kumlander
  • Пользователь
  • 26 сообщений

Отправлено 25 Февраль 2011 - 12:31

В том то главная задача и состояла, чтобы отсылать на обработку определенного типа файлы, а не все подряд. Более того, нужно было, чтобы ко мне на скрипт приходил именно HTML-код. Писать общий рутер-файл, который будет распределять где должны храниться .css, .js и файлы картинок у меня нет желания. Это пускай все будет локально и относительно.
  • 0