Структура сайта
структуру сайта. Затолкнуть все материалы в БД и оттуда вытаскивать все через url например
sitename.com/dir1/page.php?id=123. Или лучше только индекс для поиска содержать в БД, а каждый
материал на своей отдельной странице. Например вот так - sitename.con/dir1/123.php. Но нормально ли
будет функционировать проект при довольно больших объемах данных в одной директории (т.е. в
одной директории будет много файлов).
Как лучше реализовать, чтобы всем было хорошо - и пользователям и поисковикам и всем остальным.
Заранее всем премного благодарен.
Народ. Вот понадобился мне ваш совет. Допустим есть большой проект. Как мне лучше реализовать
структуру сайта. Затолкнуть все материалы в БД и оттуда вытаскивать все через url например
sitename.com/dir1/page.php?id=123. Или лучше только индекс для поиска содержать в БД, а каждый
материал на своей отдельной странице. Например вот так - sitename.con/dir1/123.php. Но нормально ли
будет функционировать проект при довольно больших объемах данных в одной директории (т.е. в
одной директории будет много файлов).
Как лучше реализовать, чтобы всем было хорошо - и пользователям и поисковикам и всем остальным.
Заранее всем премного благодарен.
Предлагаю тебе такую версию:
1) Создаешь в БД табличку с полями:
id
родительское id
заголовок
контент
2) Делаешь страничку с дизайном и скриптом который через GET будет передавать id и родительский id ссылаясь на себяже
3) Проверяешь скриптом по базе наличие и выводишь в соответствующие метки значения.
Если ты действительно собираешся делать большой проект советую сделать именно так, потомучто в дальнейшем это облегчит создание множества твоих примочек таких как поиск по сайту, статистика и т.д.
Естественно незабывай про безопастность.
Предлагаю тебе такую версию:
1) Создаешь в БД табличку с полями:
id
родительское id
заголовок
контент
2) Делаешь страничку с дизайном и скриптом который через GET будет передавать id и родительский id ссылаясь на себяже
3) Проверяешь скриптом по базе наличие и выводишь в соответствующие метки значения.
Если ты действительно собираешся делать большой проект советую сделать именно так, потомучто в дальнейшем это облегчит создание множества твоих примочек таких как поиск по сайту, статистика и т.д.
Естественно незабывай про безопастность.
Этот вариант я в вопросе описал. Он хороший в плане простоты, но плохой в качестве раскрутки.
Этот вариант я в вопросе описал. Он хороший в плане простоты, но плохой в качестве раскрутки.
А что в нем плохого?
Тысячи сайтов сделаны поэтому принципу и ни каких проблем с раскруткой у них нет. Некоторые вобще на первых местах в рейтингах.
А что в нем плохого?
Тысячи сайтов сделаны поэтому принципу и ни каких проблем с раскруткой у них нет. Некоторые вобще на первых местах в рейтингах.
Хорошо. Пусть будет так. Но ты посмотри как сделана структура сайтов в платных CMS. Например - Bitrix.
Хорошо. Пусть будет так. Но ты посмотри как сделана структура сайтов в платных CMS. Например - Bitrix.
соглашусь со шмитом,
если делать с БД, то это легче ну и меньше сил затратишь.
если каждый материал на своей странице, то это действительно наилучший вариант для раскрутки!!!
индексация поисковиками, при таком расположении наилучшая... со всеми вытекающими. Большинство крупных сайтов переходят именно на такое расположение.
Минусы
- теряешь все возможности сервера БД
- придется самому реализовывать поиск........
Насчет большого количества фалов в директории, то тормаза возможны, но ничего не мешает создавать множество папок(как вариаент для каждлго материала своя папка), все зависит от ТЗ.
А все мета данные (дата добавления, кто добавил, коментарии) можно хранить в xml файлах..
Сам хочу в ближайшем будущем перейти именно на такое размещени материалов...
соглашусь со шмитом,
если делать с БД, то это легче ну и меньше сил затратишь.
если каждый материал на своей странице, то это действительно наилучший вариант для раскрутки!!!
индексация поисковиками, при таком расположении наилучшая... со всеми вытекающими. Большинство крупных сайтов переходят именно на такое расположение.
Минусы
- теряешь все возможности сервера БД
- придется самому реализовывать поиск........
Насчет большого количества фалов в директории, то тормаза возможны, но ничего не мешает создавать множество папок(как вариаент для каждлго материала своя папка), все зависит от ТЗ.
А все мета данные (дата добавления, кто добавил, коментарии) можно хранить в xml файлах..
Сам хочу в ближайшем будущем перейти именно на такое размещени материалов...
Большие проекты не используют много файлов, это иллюзия. Да, у них, например, путь к новостям такой: "/news/2005/10/14/terrorists.html", но это не значит, что у них туча папок и файлов в них. Это не очень сложная настройка, чтобы вместо того, чтобы искать этот файл, вызывался скрипт в корне, которому и передают эту строку. А уж он из БД достает информацию и возвращяет страницу. Это сделано по двум причинам:
1. Очень хорошая оптимизация для поисковых машин
2. Красивые ссылки без вопросительных знаков и амперсендов, которые приятно сохранять в "избранное" и кидать на форумах.
Большие проекты не используют много файлов, это иллюзия. Да, у них, например, путь к новостям такой: "/news/2005/10/14/terrorists.html", но это не значит, что у них туча папок и файлов в них. Это не очень сложная настройка, чтобы вместо того, чтобы искать этот файл, вызывался скрипт в корне, которому и передают эту строку. А уж он из БД достает информацию и возвращяет страницу. Это сделано по двум причинам:
1. Очень хорошая оптимизация для поисковых машин
2. Красивые ссылки без вопросительных знаков и амперсендов, которые приятно сохранять в "избранное" и кидать на форумах.
я знаю про, что я говорю, а откуда у тебя такая информация о структуре крупных проетов?
я знаю про, что я говорю, а откуда у тебя такая информация о структуре крупных проетов?
Я, вроде, тоже знаю. Дело в том, что я не совсем однократно так сам делал. Да и много стандартных "движков" это поддерживают. Вы считаете, что это невозможно?
А информация эта достаточно общеизвестно. Ну или подумайте как долго должен будет исполняться скрипт, чтобы все время обновлять информацию о меню, новостях в левом столбике и т.д. Сервер загнется.
Вот примеры, чтобы не быть голословным:
http://3dnews.ru
http://www.ferra.ru/
http://list.mail.ru
Я, вроде, тоже знаю. Дело в том, что я не совсем однократно так сам делал. Да и много стандартных "движков" это поддерживают. Вы считаете, что это невозможно?
А информация эта достаточно общеизвестно. Ну или подумайте как долго должен будет исполняться скрипт, чтобы все время обновлять информацию о меню, новостях в левом столбике и т.д. Сервер загнется.
Вот примеры, чтобы не быть голословным:
http://3dnews.ru
http://www.ferra.ru/
http://list.mail.ru
На новостных сайтах все реализовано с помощью mod_rewrite. Вот почему такие красивые url. Но у них свои серваки обычно. А mod_rewrite нормально нагружает CPU сервера, даже при хорошей настройке (конечно при хорошей посещаемости и больших БД). Со своим серваком в принципе не страшно, а вот платный хостинг - не уверен.
Я тут придумал способ как все это красиво реализовать. Выдаю вам на рассуждение.
Для каждого материала своя страница такого вида.
include "header.php";
/*
А здесь вытаскиваем мат-ал из БД. И для поиска
хорощо (вся инфа физически находится в БД). И
для поисковиков (красивые url). Плюс ко всему
прикрутим еще кэширование. По-моему хороший
вариант.
*/
include "footer.php";
?>
Я бы не сказал, что mod_rewrite сильно грузит сервер. Например, мой хостер infobox.ru (всем рекомендую, кстати) разрешает. У него еще есть статистика загруженности процессора. Она практически не отлипала от нуля. Вот пример файлика .htaccess в корне сайта:
# mod_rewrite in use
#
RewriteEngine On
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update YourDirectory (just / for root)
# RewriteBase /YourDirectory
#
# Rules
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php
Это вариант, и я так даже делал. Но, опять таки, море файлов, и на сей раз - PHP исполняемых и совершенно одинаковых.
Я бы не сказал, что mod_rewrite сильно грузит сервер. Например, мой хостер infobox.ru (всем рекомендую, кстати) разрешает. У него еще есть статистика загруженности процессора. Она практически не отлипала от нуля. Вот пример файлика .htaccess в корне сайта:
# mod_rewrite in use
#
RewriteEngine On
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update YourDirectory (just / for root)
# RewriteBase /YourDirectory
#
# Rules
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php
Если не трудно то кинь. И ввобще что мне нужно будет писать в .htaccess и в скрипте если я хочу чтобы ссылка http://url.com/dir1/index.php?id-123 обрабатывалась как http://url.com/dir1/123
Если не трудно то кинь. И ввобще что мне нужно будет писать в .htaccess и в скрипте если я хочу чтобы ссылка http://url.com/dir1/index.php?id-123 обрабатывалась как http://url.com/dir1/123
Я сам могу в чем-то путаться. Но тебе надо этот файл пихнуть в dir1, вроде без изменений. В ту же папку засунуть index.php. А что в нем будет, я что-то не могу разобраться пока что. Буду искать..
Функция для преобразования обычной строки GET в абсолютную:
GLOBAL $mosConfig_live_site, $mosConfig_sef, $mosConfig_mbf_content;
global $iso_client_lang;
if( $mosConfig_mbf_content && $string!="index.php" &&
!eregi("^(([^:/?#]+):)",$string) && !strcasecmp(substr($string,0,9),"index.php") &&
!eregi("lang=", $string) ) {
$string .= "&lang=$iso_client_lang";
}
if ($mosConfig_sef && !eregi("^(([^:/?#]+):)",$string) && !strcasecmp(substr($string,0,9),"index.php")) {
// Replace all & with &
$string = str_replace( '&', '&', $string );
if ($string=="index.php") {
$string="";
}
$sefstring = "";
if ( (eregi("option=com_content",$string) || eregi("option=content",$string) ) && !eregi("task=new",$string) && !eregi("task=edit",$string) ) {
/*
Content
index.php?option=com_content&task=$task§ionid=$sectionid&id=$id&Itemid=$Itemid&limit=$limit&limitstart=$limitstart
*/
$sefstring .= "content/";
if (eregi("&task=",$string)) {
$temp = split("&task=", $string);
$temp = split("&", $temp[1]);
$sefstring .= $temp[0]."/";
}
if (eregi("&id=",$string)) {
$temp = split("&id=", $string);
$temp = split("&", $temp[1]);
$sefstring .= $temp[0]."/";
}
if (eregi("&lang=",$string)) {
$temp = split("&lang=", $string);
$temp = split("&", $temp[1]);
$sefstring .= "lang,".$temp[0]."/";
}
$string = $sefstring;
} else if (eregi("option=com_",$string) && !eregi("option=com_registration",$string) && !eregi("task=new",$string) && !eregi("task=edit",$string)) {
/*
Components
index.php?option=com_xxxx&...
*/
$sefstring = "component/";
$temp = split("\?", $string);
$temp = split("&", $temp[1]);
foreach($temp as $key => $value) {
$sefstring .= $value."/";
}
$string = str_replace( '=', ',', $sefstring );
}
//echo $mosConfig_live_site."/".$string;
return $mosConfig_live_site."/".$string;
} else {
return $string;
}
}
$url_array = explode("/", $_SERVER['REQUEST_URI']);
if (in_array("content", $url_array)) {
$uri = explode("content/", $_SERVER['REQUEST_URI']);
$option = "com_content";
$_GET['option'] = $option;
$_REQUEST['option'] = $option;
$pos = array_search ("content", $url_array);
// language hook for content
$lang = "";
foreach($url_array as $key=>$value) {
if ( !strcasecmp(substr($value,0,5),"lang,") ) {
$temp = explode(",", $value);
if (isset($temp[0]) && $temp[0]!="" && isset($temp[1]) && $temp[1]!="") {
$lang = $temp[1];
}
unset($url_array[$key]);
}
}
// $option/$task/$sectionid/$id/$Itemid/$limit/$limitstart
if (isset($url_array[$pos+6]) && $url_array[$pos+6]!="") {
$task = $url_array[$pos+1];
$sectionid = $url_array[$pos+2];
$id = $url_array[$pos+3];
$Itemid = $url_array[$pos+4];
$limit = $url_array[$pos+5];
$limitstart = $url_array[$pos+6];
$QUERY_STRING = "option=com_content&task=$task§ionid=$sectionid&id=$id&Itemid=$Itemid&limit=$limit&limitstart=$limitstart";
// $option/$task/$id/$Itemid/$limit/$limitstart
if ($lang!="") {
$QUERY_STRING .= "&lang=$lang";
}
$_SERVER['QUERY_STRING'] = $QUERY_STRING;
$REQUEST_URI = $uri[0]."index.php?".$QUERY_STRING;
$_SERVER['REQUEST_URI'] = $REQUEST_URI;
}
if (in_array("component", $url_array)) {
$uri = explode("component/", $_SERVER['REQUEST_URI']);
$uri_array = explode("/", $uri[1]);
$QUERY_STRING = "";
foreach($uri_array as $value) {
$temp = explode(",", $value);
if (isset($temp[0]) && $temp[0]!="" && isset($temp[1]) && $temp[1]!="") {
$_GET[$temp[0]] = $temp[1];
$_REQUEST[$temp[0]] = $temp[1];
$QUERY_STRING .= $temp[0]=="option" ? "$temp[0]=$temp[1]" : "&$temp[0]=$temp[1]";
}
}
$_SERVER['QUERY_STRING'] = $QUERY_STRING;
$REQUEST_URI = $uri[0]."index.php?".$QUERY_STRING;
$_SERVER['REQUEST_URI'] = $REQUEST_URI;
}
// Extract to globals
while(list($key,$value)=each($_GET)) $GLOBALS[$key]=$value;
}
Я сам могу в чем-то путаться. Но тебе надо этот файл пихнуть в dir1, вроде без изменений. В ту же папку засунуть index.php. А что в нем будет, я что-то не могу разобраться пока что. Буду искать..
чтоб тоже не быть голословным http://aspnetmania.com/.
Все материалы являются html страницами, хотя сам сайт написан на asp.net.
чтоб тоже не быть голословным http://aspnetmania.com/.
Все материалы являются html страницами, хотя сам сайт написан на asp.net.
Не хочу разочаровывать, но после простейшей проверки я убедился, что все это динамика. Зайдя по первой попавшейся ссылке http://aspnetmania.com/Users/default.aspx я добавил пару параметров, и меня выкинуло на (естественно статическую) страницу http://aspnetmania.com/Error.aspx?aspxerrorpath=/index.aspx почему-то в корне. Вывод прост - это все динамика.
Тоже пользуюсь инфобоксом. Действительно хороший хостер. А по поводу раскрученной здесь темы хотелось бы поподробнее.
Кажется, уже практически все разжевано :). Единственное что можно тут сделать, это подчистить эти две функции.
Или ты имел в виду что-то другое?
Офф: Кинь мне приватом, пожалуйста, свой реферерский номер с инфобокса.
1. Очень хорошая оптимизация для поисковых машин
Поисковые системы, в частности Апорт, квотируют количество динамических страниц на сайте.
Определить "динамичность" страницы они могут по наличию символа "?" в строке запроса, по заголовку HTTP X-Powered-By или по расширению файла.
С помощью mod_rewrite можно приводить ссылки вида http://url.com/dir1/123.html к http://url.com/dir1/index.php?id=123, например так:
Options +Includes -Indexes
Order allow,deny
Allow from all
RewriteEngine On
RewriteRule ^dir1/([0-9]+)\.html$ /dir1/index.php?id=$1 [L,QSA]
Запретить заголовок X-Powered-By: PHP может директива php.ini expose_php = Off
"Оптимизация" в данном случае заключается только в том, что ПС воспримет динамическую страницу как статичный HTML.
Худшее что только можно придумать для индексации - это устроить переходы по страницам через кнопки методом POST. Это так, на всякий случай.
Не хочу разочаровывать, но после простейшей проверки я убедился, что все это динамика. Зайдя по первой попавшейся ссылке http://aspnetmania.com/Users/default.aspx я добавил пару параметров, и меня выкинуло на (естественно статическую) страницу http://aspnetmania.com/Error.aspx?aspxerrorpath=/index.aspx почему-то в корне. Вывод прост - это все динамика.
посмотри раздел статьи там все статические html, а другие, не нуждающиеся в индексации страницы, являются динамичекими........
Худшее что только можно придумать для индексации - это устроить переходы по страницам через кнопки методом POST. Это так, на всякий случай.
Ну, такое можно придумать только с оч-ч-ень больной головы ;-)
посмотри раздел статьи там все статические html, а другие, не нуждающиеся в индексации страницы, являются динамичекими........
В таком случае загляните, например, на страницу http://aspnetmania.com/Articles/Category/16.html . Т.е. Вы полагаете, что этот файл действительно есть? Так же как и 1134525.html там же?
HTTP/1.x 200 OK
...
X-Powered-By: ASP.NET
Тем не менее имеет смысл кешировать редко изменяющиеся документы, большинство CMS умеют это делать.
Эта страница динамическая, сервер отвечает:
HTTP/1.x 200 OK
...
X-Powered-By: ASP.NET
Тем не менее имеет смысл кешировать редко изменяющиеся документы, большинство CMS умеют это делать.
Вот что я и пытаюсь доказать. Нынче портальные системы уже не делают в статике. Это псевдодинамика по схеме, описанной выше.
Да. Без кеширования сервера бы просто не могли вынести такой большой нагрузки.
Собственно кому интерестно, то можно почитать тут.
Замечательная ссылка! В избранное.
Пасиб, тут все и разъяснено как надо:)
но вот какя мысля меня посетила, почему бы не генерировать статические страницы, праллельно с бд, те админская часть работает с бд, (хотя не для всех проектов возможно но для моего магазина было реально, я реализовал эту идею частично) а пользователь получает статику, решается 2 проблемы, нет запросов к бд, что хорошо для сервера, а вторая - хорошая индексация в поисковиках )
из моего опыта: делал инет магазин, дизайн кросбраузерный, при использовании реврайтов при использовании Opera, сайт работал не корректно, проблему решил использованием ErrorDocument
но вот какя мысля меня посетила, почему бы не генерировать статические страницы, праллельно с бд, те админская часть работает с бд, (хотя не для всех проектов возможно но для моего магазина было реально, я реализовал эту идею частично) а пользователь получает статику, решается 2 проблемы, нет запросов к бд, что хорошо для сервера, а вторая - хорошая индексация в поисковиках )
Я собственно над этим сейчас работаю:) Только правда с меню. По поводу динамики я не знаю, что все так бегают тут кругами. Читаем
пишется в апаче такая фигня (в настройках к конкретному хосту), а index.php уже сам обрабатывает URI как ему нужно... это при запросе, при генерации страници нужно, естественно, все ссылки привести к виду
это для примера, может кому по другому нужно. Получается красивая структура сайта. Понятно дело, URI нужно будет разгребать и проверять на валидность...
короче типа так, может я чего повторил из того что было, за мной это водится 8-)...
да еще можно при помощи этих же алиасов групировать
AliasMatch /en/.* /var/www/site/index_en.php
AliasMatch /ua/.* /var/www/site/index_ua.php
AliasMatch .*jpg /var/www/site/get_img.php
вотъ
да еще, не все хостеры будут ето прописывать...
Случайно нет линка на информацио о том как живут поисковики и с советами оптимизации сайта под них, да такого чтобы подробненький был?
Случайно нет линка на информацио о том как живут поисковики и с советами оптимизации сайта под них, да такого чтобы подробненький был?
Например, тут можете глянуть. Конструктивно и информативно
http://mywebsearch.adelite.com/articles/20.html
Например, тут можете глянуть. Конструктивно и информативно
http://mywebsearch.adelite.com/articles/20.html
Посмотрел, почитал, сохранил. Интересно, но :( маловато... Придется клянчить с паяльником у одного товарища, он просто занимался исследованием этой области, если поход будет удачным могу потом выложить.
Посмотрел, почитал, сохранил. Интересно, но :( маловато... Придется клянчить с паяльником у одного товарища, он просто занимался исследованием этой области, если поход будет удачным могу потом выложить.
Тут находится море статей на интересующую Вас тему. Кидаю еще пару ссылок:
http://www.souz.co.il/internet/folder-0518/
http://hostinfo.ru/tree/internet/search/about/
Тут находится море статей на интересующую Вас тему. Кидаю еще пару ссылок:
http://www.souz.co.il/internet/folder-0518/
http://hostinfo.ru/tree/internet/search/about/
переделал свой сайт, теперь ссылки имеют вид
название/Articles/Article/45.html )))
В asp.net 2.0 использовал модуль UrlRewrite
вот так...
переделал свой сайт, теперь ссылки имеют вид
название/Articles/Article/45.html )))
В asp.net 2.0 использовал модуль UrlRewrite
вот так...
Посмотрел. И действительно получилось! Поздравляю )