Пребывая в перманентных нелёгких раздумьях относительно web-технологий и своей к ним причастности, решил поделиться одной простой мыслью.
Было: Принцип KISS в настоящее время используется плохо, и это — плохо!
UPD 1: Афтыр пытается изобрести велосипед, поможем ему в этом? :)
UPD 2: Автору уже не помочь… :)
Было: Такой нелепый вывод был сделал на основе анализа настроек .htaccess для нескольких ультра-популярных систем.
UPD 3: Автор приносит извинения всем почитателям таких настроек, но до сих пор ещё пытается понять «что проще», автор не отрицает, что он «ещё учится»… :)
Чем именно? ::
За прошедшие пару месяцев я вынужденно ознакомился с «коробочными» настройками mod_rewrite в .htaccess файлах следующих систем:
Только не подумайте, что они мне не нравятся, как раз наоборот! Они хороши, все, по своему хороши для «своих» задач! И, да, я их все «смотрел»/«использовал» так, или иначе!
Принцип, по которому устроены настройки соответствует следующей логике:
Если нет файла, то перейти к движку.
А именно, в общих чертах примерно так:
Почему этот принцип используется настолько повсеместно – ответить не смог.
Видимо когда-то давным давно кто-то решил, что так будет лучше всего.
С тех пор никто особенно не задумывается, работает ведь, зачем менять?
Видимо, это действительно удобно, но…
Что нам даёт использование этого принципа:
Кстати, в AmiroСMS и ряде других, подозреваю, вообще используется «архаика» на основе обработки 404 ошибки, это – «ze best»! Хотя система (не сочтите за рекламу) в целом — не плохая (ну, должен же я сказать что-то положительное, раз уже сказал что-то отрицательное).
И, вот, собственно, вопрос – что делать, как быть?
Для самописных (с нуля) сайтиков-визиток с десятком страниц я теперь поступаю вот так:
Что это мне дает:
Что представляет собой моя «статика»?
Текстовые файлы, банальные текстовые файлы…
Первая строчка это TITLE.
Вторая строчка это HEAD INCLUDE: всё, что мне нужно вставить до конца head.
Всё, что ниже третьей строчки — тельце странички…
Шаблон обычный, обычный такой шаблон, подключается в движок после того, как я «выберу» из статики три эти «переменные». Я могу сделать сколько угодно переменных, могу разделить их «спецпоследовательностью-спецсимволов», чтобы «чОтко» всё было.
Быстро ли работает?
Я тестов не делал, но, ИМХО – не медленнее.
А что с данными БД?
Так, а кто мешает сделать страничку под каждый «контроллер», или встроить «контроллеры» в тельце странички и обрабатывать «по параметрам».
Безопасность?
В PHP я – неофит, встроил такую проверку в начало «движка», но, полагаю, что при правильных настройках доступа она вообще не нужна.
С удовольствием выслушаю комментарии относительно её ошибочности.
Спасибо за внимание!
Было: Принцип KISS в настоящее время используется плохо, и это — плохо!
UPD 1: Афтыр пытается изобрести велосипед, поможем ему в этом? :)
UPD 2: Автору уже не помочь… :)
Было: Такой нелепый вывод был сделал на основе анализа настроек .htaccess для нескольких ультра-популярных систем.
UPD 3: Автор приносит извинения всем почитателям таких настроек, но до сих пор ещё пытается понять «что проще», автор не отрицает, что он «ещё учится»… :)
Чем именно? ::
За прошедшие пару месяцев я вынужденно ознакомился с «коробочными» настройками mod_rewrite в .htaccess файлах следующих систем:
- 1C-Bitrix
- Amiro
- Drupal
- Joomla
- Wordpress
- TYPO3
- Cogear
Только не подумайте, что они мне не нравятся, как раз наоборот! Они хороши, все, по своему хороши для «своих» задач! И, да, я их все «смотрел»/«использовал» так, или иначе!
Принцип, по которому устроены настройки соответствует следующей логике:
Если нет файла, то перейти к движку.
А именно, в общих чертах примерно так:
<IfModule mod_rewrite.c> RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ <u>index.php</u> [L] </IfModule>
Почему этот принцип используется настолько повсеместно – ответить не смог.
Видимо когда-то давным давно кто-то решил, что так будет лучше всего.
С тех пор никто особенно не задумывается, работает ведь, зачем менять?
Видимо, это действительно удобно, но…
Что нам даёт использование этого принципа:
- Движок анализирует URL, ищет для него запись в БД.
- Если записи нет, выдается 404.
- Если доступ текущему пользователю «запрещён» – 403.
- В общем случае мы лишены возможности «вывести» стандартную 404 ошибку сервера.
- Порой, для тех страниц, которые «есть» мы вынуждены в коде писать вставки для «подтягивания» движка и шаблонизатора и т.п. Хотя, вообще, конечно, можно от этого избавиться, дописав их в движок, если их там нет.
Кстати, в AmiroСMS и ряде других, подозреваю, вообще используется «архаика» на основе обработки 404 ошибки, это – «ze best»! Хотя система (не сочтите за рекламу) в целом — не плохая (ну, должен же я сказать что-то положительное, раз уже сказал что-то отрицательное).
И, вот, собственно, вопрос – что делать, как быть?
Для самописных (с нуля) сайтиков-визиток с десятком страниц я теперь поступаю вот так:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ ../index.php?fn=%{REQUEST_FILENAME} [NS,NC,L] </IfModule>
Что это мне дает:
- «Статика» начинает обрабатываться только в том случае, если она есть.
- Если статики нет, значит так должно быть, отдаем 404 «из умолчания».
- К статике не нужно «привязывать» шаблон, он в самом движке, сразу.
Что представляет собой моя «статика»?
Текстовые файлы, банальные текстовые файлы…
Первая строчка это TITLE.
Вторая строчка это HEAD INCLUDE: всё, что мне нужно вставить до конца head.
Всё, что ниже третьей строчки — тельце странички…
Шаблон обычный, обычный такой шаблон, подключается в движок после того, как я «выберу» из статики три эти «переменные». Я могу сделать сколько угодно переменных, могу разделить их «спецпоследовательностью-спецсимволов», чтобы «чОтко» всё было.
Быстро ли работает?
Я тестов не делал, но, ИМХО – не медленнее.
А что с данными БД?
Так, а кто мешает сделать страничку под каждый «контроллер», или встроить «контроллеры» в тельце странички и обрабатывать «по параметрам».
Безопасность?
В PHP я – неофит, встроил такую проверку в начало «движка», но, полагаю, что при правильных настройках доступа она вообще не нужна.
<?php if(isset($_GET["fn"])){ if(stristr($_SERVER["REQUEST_URI"], $_SERVER["SCRIPT_NAME"]) === false) { $fn = $_GET["fn"]; if(file_exists($fn) === true){ $direct = 'y'; require_once('core.php'); }else{ $type = 404; require_once('error_report.php'); } require_once('core.php'); }else{ require_once('error_report.php'); } }else{ require_once('error_report.php'); } ?>
С удовольствием выслушаю комментарии относительно её ошибочности.
Спасибо за внимание!