Всем привет!
Объявлен конкурс! Победителю - 10$. Хочу, чтобы помогли причесать вот это жалкое подобие скрипта движка:
CODE (
htmlphp):
скопировать код в буфер обмена
<?php
if( $_SERVER['HTTP_HOST'] == 'www.site.ru' ) {
header("HTTP/1.1 301 Moved Permanently"); header("Location: http://site.ru" . $_SERVER['REQUEST_URI']); } if ($_SERVER['REQUEST_URI'] == "/") include "data/index.php";
elseif ($_SERVER['REQUEST_URI'] == "/about.html") include "data/about.php";
elseif ($_SERVER['REQUEST_URI'] == "/contacts.html") include "data/contacts.php";
elseif ($_SERVER['REQUEST_URI'] == "/office.html") include "data/office.php";
elseif ($_SERVER['REQUEST_URI'] == "/services.html") include "data/services.php";
elseif ($_SERVER['REQUEST_URI'] == "/articles/") include "data/articles/index.php";
elseif ($_SERVER['REQUEST_URI'] == "/articles/horosho.html") include "data/articles/horosho.php";
elseif ($_SERVER['REQUEST_URI'] == "/articles/ploho.html") include "data/articles/ploho.php";
elseif ($_SERVER['REQUEST_URI'] == "/articles/gluho.html") include "data/articles/gluho.php";
elseif ($_SERVER['REQUEST_URI'] == "/articles/glupo.html") include "data/articles/glupo.php";
else { header("HTTP/1.0 404 Not Found"); include "errors/404.php"; } include "templates/template.php";
?>
В шаблоне - переменные (теги, контент), в файлах .php им присвоено значение.
И .htaccess к нему:
CODE (
htmlphp):
скопировать код в буфер обмена
Options -Indexes +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^\.htaccess$ - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?_REQUEST=$1 [L]
Все работает, но примитив напрягает. Это как землю вскапывать голыми руками.
Искал долго, читал много. Ничего не нарыл. В итоге написал это.
Помогите пожалуйста! Лаконизм кода приветствуется.
ЗЫ. Готов до первого поста с решением внести объявленный призовой фонд (10$) в залог авторитету форума и прогеру в законе, он и рассудит, и присудит, и переведет приз победителю.
tsoi85
Замечательно! Это настоящий движок! Нет двойной проверки: 1) наличия урла (проверяет движок в массиве, а если на сайте не 8, а 8000 страниц?); 2) наличия файла в каталоге /data/.... (проверяет апач и делает это неизбежно). Следовательно, первую проверку (движком) надо убрать, что блестяще проделал
tsoi85. Движок работает почти также быстро, как и реально лежащие файлы с инклудящимся шаблоном. В случае с массивом урлов все работало заметно медленнее.
Но появились новые траблы:
1) не выводится 404. Понятно, что это должен делать апач через ErrorDocument. Я пробовал добавлять в .htaccess эту директиву в двух вариантах: ErrorDocument 404 /errors/404.php и ErrorDocument 404 /data/errors/404.php . Не работает, браузер Firefoks показывает пустую страницу с пустым source. Пробовал в движке комментить последние строки, тоже не помогает:
;
2) выводятся урлы: /index.html ; /index.php ; /articles/index.html ; что недопустимо (дублирование контента). Очень желательно по ним получать 404, на худой конец - 301.
Как сделать не знаю.
(Добавление)
White пишет:DeepVarvar пишет:
А вообще все эти выкрутасы можно сделать в одном .htaccess
для вас было бы пожалуй наиболее правильным решением
Уважаемые
White и
DeepVarvar! Оромное спасибо за участие и желание помочь. Решение сделать все через .htaccess лежит на поверхности и не является оптимальным. Озвучиваю МОТИВЫ написания движка:
1. Возможность один раз в одном месте инклудить шаблон. В варианте реально лежащих по запрашиваемому пути файлов .php с рерайтом на .html нужно было в каждом файле прописывать путь к шаблону (include "templates/template.php"; или "../templates/template.php" и т.д.);
2. Возможность получать 200 только по тем урлам, которые есть в Sitemap.xml. По всем остальным мой первоначальный вариант движка и все здесь предложенные варианты с массивом урлов отдают 404, например по /index.php, /index.html, и это ЗДОРОВО. В случае реальных урлов (.*)/index.html приходилость редиректить 301 на (.*)/, а вот при запросе урлов с .php на конце, он их выводил как зайчик с ответом 200 и с этим, наверное, ничего сделать нельзя. Яндекс ест их регулярно, не смотря на запрет в роботсе, и держит не в индексе, но в загашнике, что неприятно, чувствуешь какую-то беспомощность перед этим монстром;
3. Возможность в дальнейшем легче перейти на php + mysql.
4. Наличие движка как такового повышает социальный статус: был безлошадный, голь перекатная, а теперь - верхом на движке о четырех копытах, зажиточный !
ok положите. только вы забыли одно
но. запрашивать этот файл будет не клиент через браузер, а ваш index.php через include.
P.S. я же сказал, не заморачивайтесь. вероятность того что кто-либо не знакомый с исходниками вашего скрипта и структурой сайта попробует сделать что-либо подобное стремится к почти абсолютному нолю
(Добавление)
tsoi85 да, так должно сработать.