Помогите с mod_rewrite
#1
Отправлено 22 февраля 2011 - 12:00
Надо сделать так, чтобы когда я вызываю любой существующий .html-файл (неважно напрямую или index.html через directory index), Apache отправлял меня на заготовленный .php-файл, который будет дальше колдовать с этим .html-файлом. Ожидаю, что это какое то хитроумное правило в .htaccess, но если будут другие предложения было бы даже веселей.
Заранее благодарю за вашу помощь и желание разобраться с этой, наверное, тривиальной проблемой!
Илья
#2
Отправлено 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 )
#3
Отправлено 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
Идея состоит в том, чтобы самому себе облегчить написание и обновление страниц. Думаю эта часть очень спорная и я готов подискутировать, если, конечно, имеется желание.
#4
Отправлено 22 февраля 2011 - 18:02
Первая - просто нет кодировки, в итоге крякозябры. Вторая уже стабильнее, видна чрезвычайно ёмкая фраза. Третий добавил "копирайт". Четвёртая просто хсл файл.
Просто опиши свою мысль подробнее. Чем твоя идея удобнее чем уже существующие связки пхп-мыскля, пхп-хмл, пхп-хтмл?
Во всех случаях изменение страницы происходит также удобно, оставляя остальные элементы нетронутыми.
#5
Отправлено 22 февраля 2011 - 18:52
Подробнее так. Есть много связок всяких разных -- одна лучше другой, только часто по итогу все они сводятся к жутко неудобному способу обновления и добавления новых страниц на сайт.
Казалось бы, что может быть проще того, чтобы создать хтмл-файл своим любимым текстовым редактором? Это ведь создание чистого контента. Закинь туда же в папку цсс файлы, скрипты да картинки, которые только к этой странице относятся и voila. Остальное сделает главный шаблон: вставит копирайты, меню, общий цсс с жаваскриптом прикрутит.
Я всецело понимаю, что такой механизм вряд ли подойдет для сурового интернет магазине (по крайней мере в чисто таком виде, в котором я здесь описываю) или лютого каталога товаров (хотя я готов выдвинуть пару аргументов в защиту того, что все таки подойдет), но для нормального среднестатистического сайта, в котором важен сам контент -- это очень удачное решение.
А чем лучше связка xsl-html? Думаю тем, что подальше отделяет шаблоны представления от языка движка сайта.
#6
Отправлено 22 февраля 2011 - 19:43
Это конечно грубо и примитивно. Просто не понимаю смысла придумывать велосипед? Точно также изменяешь шаблоны и остальное по-необходимости.
Единственную причину видел бы в отсутствии на хостинге возможности использовать базу данных. Ну или у тебя каждая хтмл страницы по-своему реализована, со своим дизайном и другими фенечками, что не позволяет использовать систему "шаблонов".
Да, сейчас можно с помощью хмл заменить базу данных, но насколько это удобнее?
#7
Отправлено 22 февраля 2011 - 20:33
К слову говоря, с кастомной 404 страницей уже экспериментировал. На подобном принципе я строил свой движок, на котором, к примеру, стоит http://www.huvi.ee/
Думаю у многих веб-разработчиков с базами данных как с наркотиками: разок приняли, поняли как это круто и стали использовать везде и всюду. То есть, существует две крайности: сайт без движка вообще и сайт на крутосплетенном движке с базой данных и редактором WYSIWYG. Я был в обеих крайностях, универсальности пока не нашел. В любом случае сайты построенные с базой данных для хранения контента время от времени нуждаются в кешировании, а мой подход -- это в некотором роде и есть кеширование, только не хранящееся в базе (хотя никто не запрещает).
Насчет того, что можно с помощью хмл заменить базу данных. Я пробовал с этим играться, но пока не пришел к однозначному выводу. Для меня пока остается загадкой такие вопросы как манипулирование несколькими хмл файлами имеющими разную структуру или что делать если хмл файл станет слишком большим и что значит большой для хмл файла. Мои эксперименты закончились тем, что я сделал то самое кеширование из базы данных в хмл-файл, который обновляется при изменении в базе данных. Сейчас так работает мое старое портфолио: http://www.nevo.org/ Там (в отличии от huvi.ee) все директории заново сделаны настоящими, в каждой из которых лежит файл с хмл данными и индексовый файл, отсылающий на движок. На том мои эксперименты еще в 2006 году были закончены.
В этом основная мысль. Тем не менее шаблоны все равно нужны. Так или иначе любой сайт имеет общие черты, например, код гугл аналитикс, логотип или меню.Ну или у тебя каждая хтмл страницы по-своему реализована, со своим дизайном и другими фенечками, что не позволяет использовать систему "шаблонов".
#8
Отправлено 23 февраля 2011 - 00:32
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/
#12
Отправлено 24 февраля 2011 - 01:34
Просто расплывчато объяснил. Ты хочешь чтобы хмл вызывал пхп скрипт? О_о
Сообщение изменено: Isamashii Tora (24 февраля 2011 - 01:39 )
#13
Отправлено 24 февраля 2011 - 11:21
HTTP-запрос (ввод адреса) -> .htaccess отлавливает .html и .php файлы, отправляет их к дежурному .php-файлу -> дежурный .php-файл берет HTML-содержимое файла, на который пришел запрос и пропускает его через xslt-шаблон -> вывод результата на экран
Если с .html-файлом все примерно ясно, то .php-файл загружается как скрипт, а не как уже откомпилированный HTML, а мне надо именно это. Я хочу пропускать через шаблон результат работы файла, а не его PHP-сущность.
#15
Отправлено 25 февраля 2011 - 01:33
#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 )
#16
Отправлено 25 февраля 2011 - 12:31