|
|||||||||||||
|
|||||||||||||
min/max width/height для IE6
Метод основан на JS.
Способ прост и универсален, т.к. Вы просто указываете, где Вам нужно свойство min/max width/height = "какое-либо значение", а скрипт все сделает для IE6 сам.
Создайте текстовый файл с именем minmax.js и сохраните в него код:
/*@cc_on
@if (@_win32 && @_jscript_version>4)
var minmax_elements;
minmax_props= new Array(
new Array('min-width', 'minWidth'),
new Array('max-width', 'maxWidth'),
new Array('min-height','minHeight'),
new Array('max-height','maxHeight')
);
// Binding. Called on all new elements. If <body>, initialise; check all
// elements for minmax properties
function minmax_bind(el) {
var i, em, ms;
var st= el.style, cs= el.currentStyle;
if (minmax_elements==window.undefined) {
// initialise when body element has turned up, but only on IE
if (!document.body || !document.body.currentStyle) return;
minmax_elements= new Array();
window.attachEvent('onresize', minmax_delayout);
// make font size listener
em= document.createElement('div');
em.setAttribute('id', 'minmax_em');
em.style.position= 'absolute'; em.style.visibility= 'hidden';
em.style.fontSize= 'xx-large'; em.style.height= '5em';
em.style.top='-5em'; em.style.left= '0';
if (em.style.setExpression) {
em.style.setExpression('width', 'minmax_checkFont()');
document.body.insertBefore(em, document.body.firstChild);
}
}
// transform hyphenated properties the browser has not caught to camelCase
for (i= minmax_props.length; i-->0;)
if (cs[minmax_props[i][0]])
st[minmax_props[i][1]]= cs[minmax_props[i][0]];
// add element with properties to list, store optimal size values
for (i= minmax_props.length; i-->0;) {
ms= cs[minmax_props[i][1]];
if (ms && ms!='auto' && ms!='none' && ms!='0' && ms!='') {
st.minmaxWidth= cs.width; st.minmaxHeight= cs.height;
minmax_elements[minmax_elements.length]= el;
// will need a layout later
minmax_delayout();
break;
} }
}
// check for font size changes
var minmax_fontsize= 0;
function minmax_checkFont() {
var fs= document.getElementById('minmax_em').offsetHeight;
if (minmax_fontsize!=fs && minmax_fontsize!=0)
minmax_delayout();
minmax_fontsize= fs;
return '5em';
}
// Layout. Called after window and font size-change. Go through elements we
// picked out earlier and set their size to the minimum, maximum and optimum,
// choosing whichever is appropriate
// Request re-layout at next available moment
var minmax_delaying= false;
function minmax_delayout() {
if (minmax_delaying) return;
minmax_delaying= true;
window.setTimeout(minmax_layout, 0);
}
function minmax_stopdelaying() {
minmax_delaying= false;
}
function minmax_layout() {
window.setTimeout(minmax_stopdelaying, 100);
var i, el, st, cs, optimal, inrange;
for (i= minmax_elements.length; i-->0;) {
el= minmax_elements[i]; st= el.style; cs= el.currentStyle;
// horizontal size bounding
st.width= st.minmaxWidth; optimal= el.offsetWidth;
inrange= true;
if (inrange && cs.minWidth && cs.minWidth!='0' && cs.minWidth!='auto' && cs.minWidth!='') {
st.width= cs.minWidth;
inrange= (el.offsetWidth<optimal);
}
if (inrange && cs.maxWidth && cs.maxWidth!='none' && cs.maxWidth!='auto' && cs.maxWidth!='') {
st.width= cs.maxWidth;
inrange= (el.offsetWidth>optimal);
}
if (inrange) st.width= st.minmaxWidth;
// vertical size bounding
st.height= st.minmaxHeight; optimal= el.offsetHeight;
inrange= true;
if (inrange && cs.minHeight && cs.minHeight!='0' && cs.minHeight!='auto' && cs.minHeight!='') {
st.height= cs.minHeight;
inrange= (el.offsetHeight<optimal);
}
if (inrange && cs.maxHeight && cs.maxHeight!='none' && cs.maxHeight!='auto' && cs.maxHeight!='') {
st.height= cs.maxHeight;
inrange= (el.offsetHeight>optimal);
}
if (inrange) st.height= st.minmaxHeight;
}
}
// Scanning. Check document every so often until it has finished loading. Do
// nothing until <body> arrives, then call main init. Pass any new elements
// found on each scan to be bound
var minmax_SCANDELAY= 500;
function minmax_scan() {
var el;
for (var i= 0; i<document.all.length; i++) {
el= document.all[i];
if (!el.minmax_bound) {
el.minmax_bound= true;
minmax_bind(el);
} }
}
var minmax_scanner;
function minmax_stop() {
window.clearInterval(minmax_scanner);
minmax_scan();
}
minmax_scan();
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY);
window.attachEvent('onload', minmax_stop);
@end @*/
Подключать этот файл так:
<!--[if lte IE 6]><script src="minmax.js" type="text/javascript"></script><![endif]-->
Таким образом, администратор вполне может запретить вам менять, если не все, то некоторые из параметров через ".htaccess". Разрешить менять любые параметры можно вот так:
AllowOverride All
Запретить изменения параметров через ".htaccess" совсем, можно вот так:
AllowOverride None
Учтите, что приведенные выше директивы должны быть в файле "httpd.conf".
В примере файлы разрешено просматривать роботу Google, который приходит с доменного имени googlebot.com.
Возможно указание нескольких IP адресов через пробел. Также возможно указывать лишь честь IP адреса. Например, для того, что бы разрешить видеть ваш сайт всем из локальной сети, нужно написать что-то подобное: allow from 192.168
То же самое можно проделать, если вы хотите запретить кому-либо просмотр вашего сайта. Результат должен выглядеть вот так:
order deny,allow
allow from all
deny from 192.168.35.111
deny from googlebot.com
2. Запрет или разрешение доступа к определенным файлам.
Запрет и разрешение доступа к файлам в директории - это прекрасно. Однако, что если необходимо закрыть доступ не ко всем, а только в определенным файлам в директории? Для этого существует директива Files, которая позволяет задать файлы к которым будут применяться вложенные директивы. Рассмотрим несколько примеров:
<Files "test.php">
order allow,deny
deny from all
</Files>
Данная конструкция запрещает доступ только к одному файлу: test.php
<Files "*.inc.php">
order allow,deny
deny from all
</Files>
А этот пример запрещает доступ к файлам с окончанием: .inc.php
В выражениях можно использовать символы: * - для любой последовательности любых символов, ? - для одного любого символа.
Так же существует директива (FilesMatch), позволяющая задавать совпадение имен файлов через регулярное выражение. Если вы не знаете, что такое регулярное выражение, то можете посмотреть
При помощи регулярных выражений наш предыдущий пример можно записать вот так:
<FilesMatch "inc.php$">
order allow,deny
deny from all
</FilesMatch>
Как видите, нам уже не нужен знак * в начале (регулярные выражения по-умолчанию ищут подстроку). Но теперь мы должны явно указать на то, что имя файла должно оканчиваться на inc.php. Знак $ и служит для указания на то, что inc.php должно быть в конце строки.
Регулярные выражения - это очень мощный инструмент, позволяющий задать достаточно сложные шаблоны совпадений. Однако не стоит ими увлекаться. Их обработка требует от сервера на порядок больше вычислительных ресурсов. Поэтому, старайтесь избегать их использования.
Хочу обратить ваше внимание на одни факт. Запрещение обращения к файлу/файлам осуществляется только для протокола http. Из скриптов, которые выполняются на сервере, вы всегда может читать все "закрытые" файлы.
3. Организация перенаправления (редиректа).
При помощи файла ".htaccess" можно организовать перенаправление пользователя, если это необходимо.
Предположим, что необходимо сделать так, чтобы при доступе к файлу www.site.ru/xxx.html пользователь перенаправлялся бы на страницу www.site.ru/yyy.html. Сделать это можно так:
Redirect 301 /xxx.html http://www.site.ru/yyy.html
Цифра 301 указывает серверу, какой редирект использовать. 301 - постоянный редирект. 302 - временный. Постоянный - используется если страница была перемещена навсегда. Временный - если страница только временно недоступна (например, сайт находится в переработке).
Если необходимо перенаправить сразу список файлов, соответствующих некоторой маске, то используется вот такая конструкция:
RedirectMatch 301 /test(.*) http://www.site.ru/$1
Данная конструкция будет перенаправлять запросы к страницам, начинающимся со слова test на страницу без слова test вначале. Например, при доступе к http://www.site.ru/test_1.html пользователь будет перенаправлен на страницу www.site.ru/_1.html
$1 обозначает все то, что соответствует выражению в скобке (в нашем случае - это любое количество любых символов).
4. Задание кодировки страницы.
При помощи файла ".htaccess" можно задать кодировку страницы. После этого сервер сам будет сообщать браузеру о кодировке и вам не будет нужно вставлять в код страницы мета тег:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
Задать кодировку можно так:
AddDefaultCharset windows-1251
Эту директиву можно применять внутри FilesMatch блока, т.е. задать кодировку только для определенных файлов, что иногда может быть очень полезно.
5. Отображение скриптов в браузере.
Если вы хотите заставить сервер отобразить, например, perl или python скрипт в браузере вместо того, что бы выполнить его, то используйте следующую директиву:
RemoveHandler cgi-script .pl .py .php
Для скриптов на PHP данный метод будет работать, только если PHP установлен как cgi. Если же PHP установлен как модуль Apache (mod_php), то необходимо применить другой метод:
AddType text/html .php
6. Собственные страницы ошибок.
Иногда случаются различные ошибки, и тогда сервер отправляет пользователю некую страницу с ошибкой по-умолчанию. Обычно это простая надпись об ошибке на белом фоне. Для того, что бы ваши пользователи увидели красивую страницу с ошибкой, с вашим собственным дизайном и текстом, следует использовать следующую директиву:
ErrorDocument <код_ошибки> /error.php
Здесь "код_ошибки" - код ошибки, в ответ на которую будет выдана данная страница.
Например, для того что бы при обращении к несуществующей странице вашего сайта (ошибка 404) пользователь был переадресован на страницу 404.php нужно написать следующее:
ErrorDocument <404> /404.php
Возможности файла ".htaccess" очень обширны и даже на простое их перечисление займет объем небольшой книги.
В награду за наши труды, мы получим странички которые не будут расползаться вдругих броузерах, и при других разрешения экрана. Кроме того если вы будете создавать свои Web страницы с помощью средств автоматизированного создания сайтов, то они получаться слишком большого размера.
И так сначала коротко о том, что нам понадобится. Прежде всего самое главное - идея для сайта. Не стоит создавать сайт "просто так" или, потому что "у всех есть". Иначе вы просто постараяетесь напихать туда всё, что есть на вашем жёстком диске. Нужно выбрать общую тематику сайта, и при заполнении его содержанием, придерживаться её. Если у вас пока, нет конкретной идее, но попробовать свои силы в создании сайтов, всё-таки хочется, то можете для начала создать домашную страницу . Обычно это сайт, состоящий из единственной странички, на которой вы можете рассказать о себе, своих увлечения и поместить туда свою фотографию. Часто на домашних страничках также бывают гостевые книги. Что это такое, надеюсь объяснять не надо.
Не стоит также для начала создавать много разделов. Ведь их всегда можно будет добавить потом.
Кроме идеи, нам естественно нужен доступ в интернет. Сразу успокою вас - от вас не потребуется, чтобы соединение было установлено постоянно. Вам нужно будет только закачивать обновления на сервер.
Теперь о програмном обеспечнии. Всё необходимое для создания простых сайтов, включено в Windows. Нам понадобиться текстовый редактор Блокнот (Пуск->Программы->Стандартные -> Блокнот), графический редактор PAINT (Пуск->Программы->Стандартные -> Paint) и Мастер издания Web (Пуск->Программы->Стандартные ->Средства интернета->Мастер издания Web).
Но работать со всеми этими программами очень не удобно, они годятся только на первых порах. Поэтому как только сможете скачайте FTP манеджер Cute FTP , любой версии. Не знаю как старых версиях, но в комплект поставки версии 4.0 и 5.0 также входит бесплатный HTML редактор Cute Html . Найти эти программы можно на любом крупном сервере с freeware и shareware софтом. Теперь о том чем заменить неудобный Paint. В принципе подойдёт любой мощный графический редактор, умеющий работать с растровой графикой и поддерживающий как можно больше графических форматов. Я например использую Adobe Photoshop. Неплохо также иметь программу для создания Gif анимации.
Итак приступим. Для начала разберёмся в том как устроена WEB страница. Несмотря на, то что на них может присутствовать графика, ссылки на другие документы, таблицы и многое другое, они являются простыми текстовыми файлами с расширением *.html или *.htm. Сначала вы должны усвоить тот факт, что в самом html файле нет рисунков. Они храняться в отдельных графических файлах, а в html документе даётся лишь указание броузеру, чтобы он вставил в указанном месте картинку из этого файла. Также обстоит дело и с таблицами. С помощью специальных команд мы описываем как должна выглядеть таблица, а браузер, уже при загрузке документа "рисует" её. Точно также происходит со всем остальным содержанием страницы.
Едиственное, что и присутвует в html файле и в том, что показывает нам броузер - это текст. Он содержиться непосредственно в HTML файле. Но чтобы текст выглядел опрятно и в нём присутствовали все элементы форматирования: абзацы, отступы, пропуски, списки и т.д. нужно опять же таки вставлят в текст команды.
Давайте разберём: что это за команды? Давайте по порядку. Во-первых, когда мы создём html файл, то имеем дело с языком разметки гипертекста , сокращённо языком HTML. Во преки распространёному мнению, язык HTML не является языком программирования. Он лишь указывает броузеру, как должна выглядеть WEB страница. Команды этого языка называютя тегами . Броузер воспринимет за теги, то есть за указания по разметке текста, любой текст помещённый между символами < и >.
Во-вторых, теги бываю одиночными (в этом случае тег даёт разовый эфект в том месте,где он расположен) и парными . Парные теги это когда кусок текста "зажимается" между двумя одинаковыми тегами. В парный теги состоят из открывающего тега и закрывающего тега . Закрывающий тег это тег который стоит после текста, который должен быть "зажат" Между тегами. Он ничем не отличайтся от открывающего тега только после символа < идёт символ / потом сам тег и символ >. В общих чертах это выглядит так:
< команда html > Текст </ команда html > |
< команда html ИМЯ ПАРАМЕТРА=ЗНАЧЕНИЕ > Текст |
Создаём главную страницу сайта
Ну вот мы и разделались со скучно теорией, теперь перейдём к самому интересному - созданию своего сайта. В этой статье мы для начала создадим очень простую страничку которая будет главной страницей сайта (то есть той которая открывается первой). Остальные страницы мы создадим потом, когда вы узнаете как делать ссылки. А пока мы узнаем как использовать только самые простые Html теги, поэтому страничка будет не сложной. А вот во второй статье иы её украсим и усложним.Итак начнём. Запустите текстовый редактор Блокнот или Html редактор Cute Html. Как использовать его вы узнаете потом, а пока напишите в редакторе:
Открыющий и закрывающий теги < HTML > размещены соответственно в начале и в конце страницы всегда. Так требует стандарт html. Между тегами < HEAD > находятся теги описывающие первоначальную информацию о Web странице. В нашем случае это теги < TITLE > < /TITLE >. Теги < HEAD > всегда расположены после тега < HTML > и встречаються в документе только один раз. Это свое образная "Голова" документа. между тегами < TITLE > < /TITLE > помещают текст, который будет отображаться в заголовке бразера (над его меню). Поэтому наберите между ними какой-нибудть текст, например "Добро пожаловать на мой сайт"
Вот мы и подобрались к основной части - разделу. Между этими тегами содержится все теги и текст, который будет отображаться в браузере. Также у тега есть много параметров, которые мы рассмотрим потом.
То, что я сейчас попытался объяснить можно обозначить так - у Web страницы, также как и у человека есть голова. И в голове и в теле есть органы, но большая их часть содержится в теле.
А сейчас сохраните набранный вами текст (Лучше в специально выделенной вами для сайта папке) под именем index.html. Почему именно index.html? Потому что мы создаём главную страницу для сайта, а она всегда так называется. Если Блокнот не хочет сохранять файл с таким расширением, то в ручную переименуйте файл.
Теперь откройте этот файл в браузере и вы увидите чистый лист. Лишь в самом вверху(в заголовке браузера). Виден текст, который мы набрали между тегами < TITLE >.
Теперь пора улучшить нашу страничку. Во первых зададим её фоновой цвет. Для это в теге есть параметр BGCOLOR . Значит чтобы задать фонофой цвет, нужно изменить наш файл так (никаких тегов удалять не нужно, надо лишь дописать параметр):
фоновой цвет" > |
Здесь нужно вместо слов "фоновой цвет" подставить название цвета который вы хотите получить. Например - Black, Yellow, Green, Red, White, Gray. Но лучше указывать цвет в HEX формате. Для этого в CuteHtml нажмите:
В появившемся окне выберете цвет и нажмите OK. В текст вставиться название цвета в HEX.
Напишите любой понравившийся вам цвет и сохраните файл. Теперь откройте его и посмотрите, что получилось. Если цвет фона не изменился значит либо вы ошиблись, либо не сохранили перед этим документ.
Предположим, что у вас всё получилось. Пора добавить на страничку какой-нибудь текст. Но перед этим зададим его свойства. По умолчанию текст отображается чёрным цветом. Если вы выбрали тёмный фон, вам это не подойдет. Для задания цвета текста в теге есть параметр TEXT. Значение указывается также как и фоновой цвет.
фоновой цвет" BGCOLOR=" фоновой цвет" > |
И опять лучше указать цвет в HEX кодировке. Например если вы хотите сделать текст оранжевого цвета,а фон серого, то нужно написать:
FF8040" BGCOLOR=" CDCDCD"> |
Теперь цвет текста у нас будет оранжевым (вы можете выбрать любой другой цвет). Чтобы это проверить напишем любую бессмысленную строчку. Напомню, что текст должен находится между тегов, которых в тексте должно быть всего два(открывающий и закрывающий). Между ними может быть сколько угодно строчек.
Сохраните файл, откройте его в браузере и вы увидите текст выбранного цвета.
Вы наверняка захотите поместить на верх вашей страничкм какой-нибудь графический логотип. Как это сделать вы узнаете из второй части статьи, а пока поместим туда крупный заголовок. Заголовк это особым образом выделенный текст. Вот как его сделать.
Сотрите тот временный текст который вы написали(не надо стирать теги!) и вместо него напишите например название вашего сайта(К примеру "PupkinSoftware site"). Перед ним поставте тег <H1>, а после него закрывающий тег </H1>. Текст помещённый между этими тегами становится заголовком.
Опять сохраните изменения и откройте файл в броузере. Вы увидите, что текст слат крупным и выделенным. Если вы хотите, чтобы заголовок был поменьше, то цифру 1 в тегах, поменяйте на 2, 3 и так до 6. Чем больше цифра, тем меньше заголовок.
Заголовок, у нас есть, но размещён он не очень красиво (Этот так в нашем случае. Иногда необходимо расположение заголовка слева). Лучше разместить его в центре. Для этого перед тегом <H1> поставьте тег <center> и после тега </H1> тег </center>. Любой текст помещённый между этими тегами, будет находится в центре экрана.
Заголовок готов. Теперь нужно добавить содержания. Для этого просто набирайте текст между тегами.Для их форматирования можете использовать любые расмотренные выше теги.
Имейте в виду: в броузере текст не будет переносится на следующую строку, пока будет место на экране. Если вам в каком то месте нужно перенести текст на другую строку, то просто наберите там тег <BR>. Из следующего урока вы узнаете как создавать абзацы, что более грамотно чем использование тега <BR >. Кстати, если вам нужно пропустить большое количество строк, то просто поставте подряд несколько тегов <BR>
Теперь несколько полезных тегов:
Итог
В итоге у вас должно получится примерно вот, что:
<HTML> <HEAD> <TITLE> Добро пожаловать на мой сайт </TITLE> </HEAD> FF8040" BGCOLOR=" CDCDCD" > <center> <H1> PupkinSoftware homepage </center> </H1> <I> Извините страница в разработке </I> <HR> |
<HTML> <HEAD> <TITLE> Добро пожаловать на мой сайт </TITLE> </HEAD> 181C61" BGCOLOR="D1E0D6" > <center> <H1> Pupkin Software homepage </center> </H1> <HR> <I> Извините страница в разработке </I> |
Получилось как-то блекло и не аккуратно. Сегодня нам предстоит это исправить. Во первых, мы заменим надпись "Pupkin Software homepage" (конечно в вашем случае это какая-то другая надпись) на логотип, а также познакомимся с несколькими тегами, которые украсять ваш сайт.
Прежде, чем "вешать" на cтраничку логотип, нужно его нарисовать. Лучше всего это сделать в Adobe Photoshop , но для начала можно сварганить что-нибудь простенькое в Paint. Но имейте в виду, что в нем можно нарисовать только временную "заглушку", а потом её надо будет обязательно заменить.
Вообще, картинки, состоящие всего из нескольких цветов, лучше сохранить с формате GIF. К тому же, в этом формате вы можете залить фон прозрачным цветом, и тогда ваша картинка будет хоршо смотреться на любом фоне, т.к её фон будет сливаться с фоном странички.
Cвой логотип я сохранил в формате JPG и задал для неё белый фон. Поэтому я поменяю в нашем примере цвет фона странички на "White", то есть белый. В своей страничке вы можете указать какой угодно цвет.
Внимание! Никогда не сохраняейте изображения для Web страниц в формате BMP! Они занимают очень много места,и долго грузятся.
Но тепер самое главное - как собственно добавлять картинки на страничку. Для этого служит тег <img>. Вот как он применяется:
Здесь "путь к картинке" это адрес по которому расположено изображение, которое вы хотите добавить. Когда мы будем помещать свою страничку на сервер (т.е. собственно в интернет), то укажем там адрес на сервере. А пока укажите путь, по которому у вас лежит картинка на жёстком диске. Например "C:\Photos\vasia.jpg". Если картинка сохранена в том же каталоге, что и ваша страничка, то просто укажитие её имя - "vasia.jpg".
Именно так мы поступим. Копируйте вашу картинку в каталог со страничкой и обзовите её, например, "logo.jpg". Теперь нам осталось только заменить заголовок "Pupkin Software Homepage на картинку. Для этого удалите теги <h1> и </h1>, а также сам текст. Теперь пишем:
<HTML> <HEAD> <TITLE> Добро пожаловать на мой сайт </TITLE> </HEAD> 181C61" BGCOLOR="White" > <HR> <center> <img src="logo.jpg" alt="Страничка разработчика Василия Пупкина." > </center> <HR> <I> Извините страница в разработке </I> |
В заначении поля ALT напишите текст, который должен появляться при наведении на картинку курсора. У тега IMG Есть много других атрибутов, но мы рассмотрим их потом.
Обратите внимание, что я добавил ещё одну отсекающую черту (<HR>). Я сделал это просто для красоты, вы можете убрать её, но картинка всё равно появится.
Теперь сохраните измеенения и откройте страничку в браузере. Ну как? Уже гораздо лучше, но всё равно нам ещё работать и работать.
А где же содержание ?
Знаете чего так не хватает на нашей страничке? Тескста. Ведь в конце-концов посетители приходять на сайт из-за его содржания, а дизайн лишь создаёт приятную обстановку и удобства. Так что пора добавить немног текста. Но текст должен быть красиво оформлен, то есть должны быть соблюдены элементы форматирования - заголовки, отступы, абзацы. Первые мы создавать уже умеем (теги <Hx&lg), а сейчас поговорим о последних.
Новый абзац создаётся очень просто - тегом <p&lg. Вообще - то этот тег парный, но закрывающей тег можно не указывать. У тега есть одни важный атрибут - align. Он может принимать следующие значения: left, right, justify, center. Этот атрибут указывает куда должен прилегать абзац. В целом это выглядит так:
В этом примере я буду указывать значение left, вы же можете поэксперементировапть с другими значениями.
Теперь можно со спокойно душой писать содержание главной странички. Что бы создать новый абзац просто пишем тег <p>. Посмотрите на мой пример и вы во всём разберетесь. Обратите внимание на то, что я часто использую теги <B>, <I>, <H3>, <LI>. Советую и вам их использовать, так как они позволяют красиво отформатировать текст. Вот собственно и сам пример:
<TITLE> Добро пожаловать на мой сайт </TITLE> 181C61" BGCOLOR="White" > <HR> <center> <img src="logo.jpg" alt="Страничка разработчика Василия Пупкина." > </center> <HR> <P Align="Left"> <H3> Общая информация </H3> <P Align="Left"> Здравствуйте! Вы попали на сайт фирмы <B> Pupkin Software </B>>, которая занимается разработкой программного обеспечения. Мы рады видеть вас на своём сайте и хотим познакомить вас с нашими программными продуктами. <P Align="Left"> Мы занимаемся как написанием <i>freeware</i> и <i> shareware </i> утилит, так и разработкой ПО на заказ, за умеренную плату. С нашими ценами вы можете познакомиться в разделе "Цены". Также на сайте присутствует раздел в кототором вы можете скачать наши <i>freeware</i> и <i> shareware</i> утилиты. Информацию о фирме вы можете помотреть в разделе "О нас". <P Align="Left"> <H3> Программы: </H3> <Li> PuSo Scan v 4.1 <Li> PuSo Zaca v 2.3 <Li> PuSo Ping/Pong v 30.2 <Li> PuSo TURBO Achive Compresor v 9.5 <P Align="Left"> <H3> О нас: </H3> <li> Программист: Василий Пупкин <li> Графика: Репкин Александр Даниилович <li> Звук: Алинка Снегова <li> Иформационная поддержка: <b>MOD-LAB</b> by MOD-LAB Team <P Align="Left"> <H3> Цены: </H3> <P Align="Left"> Цена договорная и зависит от сложности выполняемой работы. Обычно цены колеблётся от 20 до 1000$ <hr> |
В этом примере нет гиперссылок, так как мы с вами ещё не изучили их - ими мы займёмся в следующий раз, обещаю. Но даже без ссылок можно создать вот такую вот страничку и получать от неюё пользу - в данном примере они узнаю о группе разработчиков ПО и смогут заказать у них по E-Mail программу.
Как видите, даже зная совсем немного тегов, можно создать довольно приличную стравничку. Я специально привёл этот пример что бы не сомневались в своих силах и уже сейчас могли начать создавать дизайн своего сайта.
В качестве домашнего задания вы можете, опираясь на данный пример, создать свою главную страничкку. А вследующий раз мы разобьём разделы по отдельным страницам и я покажу вам некоторые приёмы работы с Cute Html.
Когда приходится вести несколько проектов сразу, лучше заранее разработать для себя систему хранения всех файлов, чтобы работа не превратилась в кошмар. Лично я придерживаюсь следующей системы.
1) Выбирается самый большой раздел диска. Каталоги с проектами имеют тенденцию разрастаться до невиданных размеров. Так что о свободном месте лучше позаботиться заранее.
2) На диске создается главная папка web-projects - в ней вы будете хранить все свои web-проекты и сопутствующие материалы.
3) В качестве подпапок создаются папки проектов. В качестве имени для каждой папки я выбираю доменное имя сайта. Например в папке web-projects у вас могут быть подпапки www.microsoft.com, www.playboy.com и www.design.ru.
4) В каждой из папок создаются следующие подпапки:
Любой из продвинутых Web-серверов (IIS и Apache, но не PWS) позволяет создавать виртуальные сервера. То есть держать работающими несколько серверов одновременно. Далее советы даются на примере IIS.
Таким образом проект www.microsoft.com откликается на http://localhost:7777/, - http://localhost:8888/, - http://localhost:9999/ и так далее.
Во многих броузерах есть функция автозаполнения адреса. Когда название сервера одно (localhost), а меняется только номер порта, достаточно в адресной строке набрать пару первых букв, а затем из выпадающего списка выбрать нужную машину.
1) В Windows есть файл hosts - аналог такого же файла у UNIX. Это маленькая база данных DNS. Туда ваша машина смотрит в первую очередь, чтобы найти соответствие IP доменному имени, набранному например в адресной строке броузера.
Это файл находится в каталоге <WINDOWS>\system32\drivers\etc. Пока в нем только комментарии и одна рабочая строчка:
# Copyright (c) 1993-1995 Microsoft Corp. # # This is a sample HOSTS file used by # Microsoft TCP/IP for Windows NT. # 127.0.0.1 localhost
Адрес 127.0.0.1 это "петлевой адрес" - он всегда указывает на вашу машину. Вот почему набирая в броузере localhost мы попадаем на свою собственную машину. Вставьте под этой строкой новую:
127.0.0.1 qw
Теперь "петлевому адресу" присвоено еще одно имя "qw". Запустите броузер и наберите qw:8888/, и попадете на ваш локальный проект "". Иногда даже достаточно набрать qw:8888, чтобы броузер догадался подставить http:// в начало адреса. Так что, самым ленивым теперь не нужно набирать "localhost". Символы "qw" расположены на клавиатуре рядом, и на их набор нужна лишь пара пальцев и пара миллисекунд нашего дорого web-мастерского рабочего времени. Правда удобнее стало?
В этот же файл можно поместить IP и доменные имена ваших любимых серверов. Таким образом вашей машине не придется лезть в Сеть к DNS серверу за поиском соответствия. В век, когда космические корабли бороздят просторы Большого театра, каждая секунда - на вес золота.
2) С помощью полезной команды
subst B: <..>\web-projects
вы присваиваете пустующей букве B: ссылку на каталог проектов. Теперь в Windows Explorer и FAR-е вы быстро сможете перейти в каталог проектов, так как буква B: самая первая. Поместив эту команду в autoexec.bat, вы избавляете себя от необходимости набирать эту команду вручную после каждой загрузки машины.
Неплохо выглядит возможность управлять цветом рабочего стола или окна. Итоговый цвет складывается из смешивания трех цветов красного, зеленого и синего (RGB -Read, Green, Blue), значения которых изменяются от 0 до 255. Подготовим окно (символ), в который поместим три бегунка (символа) для управления каждым из этих цветов. Каждый символ должен иметь индивидуальное имя, которое задается в окне Properties (например knobsin, knobzel, knobkra)
Для начала зададим начальное положение бегункам. Я это делаю во втором кадре слоя Action следующим образом:
_root.regcv.knobkra._x=150;//regcv - имя окна(символа), где расположены бегунки
_root.regcv.knobzel._x=150;
_root.regcv.knobsin._x=90;
Далее задаем действия кнопке, которая вызывает (делает видимым окно(символ) regcv):
on (press) {
_root.regcv.swapDepths(11); //окно regcv на первый план
_root.regcv._visible=true; // делаем его видимым
myColor = new Color(_root.osnova); // определяем переменную myColor как цвет
rgb = (c1 << 16 | c2 << 8 | c3);// рабочего стола (можно любого окна)
_root.regcv.onEnterFrame = function() {
c1 =_root.regcv.knobkra._x+105; // интенсивность красного цвета
c3 =_root.regcv.knobsin._x+105; // интенсивность синего цвета
c2 =_root.regcv.knobzel._x+105; // интенсивность зеленого цвета
rgb = (c1 << 16 | c2 << 8 | c3);
myColor.setRGB(rgb); // получаем итоговый цвет рабочего стола
}
}
Если Вам захотелось "...себя показать", возможно подойдет такой способ . Сканируете свою фотографию, обрабатываете ее в Photoshop-е и импортируете в библиотеку своего сайта. Добавляете новый слой - у меня называется avtor. Во втором кадре слоя создаем окно(символ) и даем ему имя oknoavt. Внутри это символа создаем еще три символа: text, avtor и alfa. Не забывайте, что только указав имя символа в окне свойства, вы получите возможность управлять свойствами символа. В окно text вы вписываете рекламный текст, в окно avtor помещаете из библиотеки свою фотографию, e-mail и.т.д.. Как в пределах окна перемещать символы вы уже знаете - поэтому легко это сможете проделать со своей фотографией и разными реквизитами. В окно(символ) alfa поместим задублированный в библиотеке бегунок (символ), который использовали для управления цветом, только на этот раз будем управлять функцией alfa символов text и avtor, а имя бегунку дадим fad1. Во втором кадре слоя Action задаем начальное значение:
oknoavt._visible=false; //пока окно скрыто
_root.oknoavt.alfa.fad1._x= _root.oknoavt.alfa.fad1._x+80 // начальное значение бегунка
_root.oknoavt.avtor._alpha= _root.oknoavt.alfa.fad1._x+99; // прозрачность окна avtor
_root.oknoavt.text._alpha= 99-_root.oknoavt.alfa.fad1._x; // прозрачность окна text
В начальный момент при таком варианте текст просвечивает через фотографию и все картинки в символе avtor. Кнопке(символу), которая активизирует окно oknoavt (делает его видимым) прописываем действия:
on (press) {
_root.oknoavt.max._visible=true; // кнопка максимизации окна видима
_root.oknoavt.minavt._visible=false; // кнопка минимизации окна не видима
_root.oknoavt._visible=true; // окно показать
if (_root.oknoavt._width>470)
{
// если окно максимизировано кнопку максимизации спрятать, а минимизации показать
_root.oknoavt.max._visible =false;
_root.oknoavt.minavt._visible =true;
}
//При перемещении бегунка изменяется функция альфа (прозрачность) символов text //и avtor причем в противоположных направлениях
_root.oknoavt._visible =true;
_root.oknoavt.alfa.onEnterFrame = function() {
_root.oknoavt.avtor._alpha=(_root.oknoavt.alfa.fad1._x+99)/2;
_root.oknoavt.text._alpha=(99-_root.oknoavt.alfa.fad1._x)/2;
_root.oknoavt.swapDepths(12);}
}
При таком подходе движение бегунка влево создает эффект "всплытия" текста из графики, а при движении вправо - графики из текста. В начальном варианте окно может выглядеть допустим так:
Для того, чтобы по щелчку на Вашем e-mail вызывался почтовый агент, в действиях соответствующего символа прописываем :
on (press) {
getURL("mailto:[email protected]", "_parent");} // ваш адрес
И ...еще. Захотелось сделать надпись, которая бы двигалась в вертикальной плоскости (см.программу NBGClean.exe). Задачка оказалась не так уж и проста. Графические редакторы, позволяют это сделать, но довольно "коряво". Только результат полученный с помощью программы Plasma, меня полностью удовлетворил. Но это "украшательство" прибавило лишних 15Kb. Красиво, но для плохого interneta цена неоправданно велика.
Индикаторные часики в панели задач - также очень просто. Создаете символ (Movie Clip) в него помещаете переменную типа Dynamic Text и в первом кадре этого символа прописываете такие действия:
mydate = new Date(); // определяем переменную отражающую текущее время
sec = mydate.getSeconds(); // получаем из нее секунды
min = mydate.getMinutes(); // минуты
hour = mydate.getHours(); // часы
if (sec<10) {
sec = "0"+sec;
}
if (min<10) {
min = "0"+min;
}
if (hour<10) {
hour = "0"+hour;
}
time = hour add " " add min add " " add sec; // оформляем и присваиваем полученное значение динамической переменной.
И последнее. Размер скомпилированного (*.swf) файла у меня составил 89Kb. Для плохого interneta (бесплатный host) многовато. Чтобы как-то скрасить время загрузки и информировать пользователя о ее ходе можно воспользоваться прелоадером. Для этой цели мы предусмотрительно оставили пустым первый кадр всех слоев основной шкалы (если помните, я везде предлагал размещать символы начиная со второго кадра). Идея такая - подсчитывать сколько процентов загружено и отражать это в текстовом виде и в виде заполнения прямоугольника одного цвета другим. Итак, создаем в первом кадре сцены прямоугольник, в центре, которого размещаем символ(также прямоугольного вида) с именем zapol1 и где-то размещаем переменную типа Dynamic Text (в ней будем отражать процент загрузки) далее все это помещаем в символ zagruz. В действиях символа zagruz прописываем следующее:
onClipEvent (load) {
tot = _root.getBytesTotal(); //определяем общий размер загружаемого клипа
}
onClipEvent (enterFrame) {
loaded = _root.getBytesLoaded(); // определяем сколько байт уже загружено
percent = loaded/tot*100; // рассчитываем процент загрузки
text=Math.floor(percent)+"%"; // значение показываем в динамической переменной
_root.zagruz.zapol1._width =Math.floor(percent)*5; // увеличиваем размер символа //zapol1 в ширину.
if(loaded==tot){_root.gotoAndStop(2)} // если клип загружен переходим ко второму //кадру, где все и начинается
}
Результат примерно такой:
В заключении, мне остается только принести извинения за некрасивые имена символов (knobkra, zapol1 и т.д.) - осталось со времен работы в древнем паскале.
С бурным развитием Всемирной Сети у ее пользователей появилось множество замечательных возможностей. Одной из них является бесплатный хостинг. Разместить свою страничку в Сети проще простого, да к тому же и бесплатно. Но всем читателям МК известно, где встречается бесплатный сыр: в награду за услуги размещения информации вы должны терпеть на своих страничках баннеры хостера. Также обычно приходится обходиться без всяческих удобств — возможности использовать SSI, Perl, PHP и SQL как правило отсутствуют, что не только накладывает существенные ограничения на функциональные возможности сайта, но и доставляет немало хлопот web-мастеру. «А в чем, собственно, проблема?» — могут удивиться непосвященные читатели. Действительно, сначала все будет ОК. Страницы, которые создавались часами, будут загружаться на сервер за считанные секунды. Но вот когда через совсем небольшой промежуток времени количество страниц на сайте достигнет нескольких десятков и в очередной раз потребуется добавить новый пункт меню или изменить адрес web-мастера, вот тогда-то вам и надоест грузить и редактировать все эти HTML-файлы. А ведь код таких элементов как меню, шапка и баннеры обычно присутствует на каждой странице ресурса в неизменной форме. И при малейшем изменении одного из элементов (скажем, надо добавить новый пункт меню) приходится редактировать каждый HTML-файл. Так появляется желание поместить эти повторяющиеся элементы в отдельный файл, подключить его к каждой странице и, просто внося в него изменения, влиять на содержимое всех страниц сразу. В свое время с этой проблемой боролись про помощи фреймов. Web-мастерам было очень удобно. А посетителям? Ну, как повезет...
С появлением SSI (Server Side Include — включение на стороне сервера; см. статью Дениса ТИМОШЕНКО «Что сулит нам SSI» в МК №46 (217)) ситуация улучшилась коренным образом. Макроинструкции, исполняемые на сервере, позволили вставлять в документ содержимое другого файла. Таким образом, такие элементы как меню выносятся в отдельный файл и по необходимости подключаются к произвольному количеству web-страниц. Теперь для того, чтобы изменить меню на любом количестве страниц, достаточно изменить один единственный файл. Почему SSI так быстро стал популярным? Все очень просто: документ генерировался на стороне сервера, а пользователь получал готовый результат, даже не подозревая, что он был «сложен» в одно целое из нескольких частей. Все вроде бы наладилось. Но не тут-то было. SSI считался элитным сервисом, кроме того, прилично нагружал сервер. По этой причине только в последнее время SSI появился на некоторых бесплатных хостингах.
Но как же быть тем, кто создал свой сайт на бесплатном хостинге довольно давно? Тем, у кого этот сайт разросся, стал популярным и имеет раскрученный URL? Тем, у кого нет средств и желания на приобретение платного хостинга и доменного имени? Что делать тем, кто не хочет переезжать? Здесь на помощь приходит наш старый друг и верный помощник — JavaScript. Благодаря своей простоте и невероятной гибкости, JS позволяет многое. В том числе и подключение содержимого отдельных файлов.
Включение фрагментов кода на JS в документ осуществляется при помощи тэга <script>:
Я не буду останавливаться на толковании тэгов JS, многократно описанных на страницах МК. Кроме того, по-моему, они вполне интуитивно понятны.
«Путь к файлу с JS-кодом» указывает путь и имя файла, содержащего JS-код. Код, содержащийся в указанном файле, подключается к документу, и у посетителя создается впечатление, что код, содержащийся в подключаемом файле, попросту был размещен в документе. При этом при просмотре кода документа посетитель не увидит кода подключаемого файла, а только ссылку на него — сам файл будет загружен отдельно. Из сказанного явствует главное отличие данного метода от принципа SSI: страница собирается не на сервере, а на компьютере пользователя. Но сам пользователь, разумеется, об этом даже не подозревает.
Нетерпеливые читатели удивляться — как же может помочь подключение JS-кода из файла, когда надо подключать HTML или вовсе текст? Запросто! В JS для вставки строки в документ существует специальная команда:
Все, что заключено в кавычки ' ', будет вставлено в документ. Таким образом можно спокойно вставить в файл конструкцию типа document.write('<a href="some link">Link</a>'); и впредь путем изменения лишь одного подключаемого файла влиять на контент всего сайта.
Следует заметить, что в роли кавычек можно использовать как одинарные — ' ', так и двойные — " ", но при этом в содержимом коде должны отсутствовать такие же кавычки. В противном случае перед ними следует ставить знак \:
Напоследок приведу маленький пример:
А вот и сам подключаемый файл:
В результате при открытии файла index.html в него будет подставлено содержимое menu.js, и в окне браузера появятся ссылки, код которых находится в menu.js. Также хочу подчеркнуть, что содержимое файла menu.js будет подставляться внутри тэга <script>, посему простая прописка в файле <a href="some menu link 1">Пункт меню 1</a> (без document.write(' ')) не даст ожидаемого результата.
В этой статье я расскажу о том как сделать на своём сайте любую форму, но предупрежу сразу, что речь о каком-либо программировании в этой статье не пойдёт.
Итак, что же такое HTML-формы? Форма - это способ передачи данных скрипту(сценарию). Все вы наверное видели какие-либо анкеты в Интернете, панель занесения сообщения в гостевую книгу и др. Всё это и есть HTML-формы. Но как же они создаются? Давайте всё рассмотрим на примерах.
Тэги <form></form>
Всё описание HTML-формы располагается внутри тэгов <form></form>. Закрывающий тэг </form> никогда не несёт в себе какой-либо информации, а вот открывающий заслуживает дополнительного рассмотрения. Рассмотрим синтаксис этого тэга: <form method="метод"action="имя_сценария"> Атрибут Method может принимать значения GET или POST. А атрибут action представляет собой URL какого-либо сценария, выполняющего действия в соответствии с заполненной формой.
Тэг <input> и его атрибуты
Тэг <input> имеет несколько атрибутов. Вот основные из них: <input type="тип поля"value="значение"name="имя"> Где name приримает любое уникальное имя в пределах одной формы; любое поле ввода должно иметь имя, для последующего обрабатывания данных из этого поля сценарием. Value - это значение по умолчанию данного поля. Атрибут type может принимать значения text, hidden, password, checkbox, radio, reset, submit. Остановимся на каждом из них поподробнее. После описания данных типов, мы рассмотрим всё на примерах.
Text - указывает браузеру, что нужно отобразить поле ввода. Значение атрибута value здесь будет указывать первоначальное значение данного поля. Также здесь могут присутствовать два дополнительных атрибута, это size и maxlenght. Size определяет длину поля, а maxleght задаёт максимальное количество символов, которое может ввести пользователь.
Hidden - этот тип текстового поля браузер на отображает. Нужен он для скрытия от посетителя каких-либо данных.
Password - этот тип поля отображается аналогично текстовому, только все введённые в нём символы будут закрыты звёздочками, для того, чтобы никто не мог подсмотреть пароль, вводимый вами.
Checkbox - браузер отображает этот тип поля квадратом, в котором можно поставить флажок. По умолчанию value данного поля стоит ON, но если поставить флажок в это поле, то value примет значение checked.
Radio - несколько похоже на checkbox, но только одно из нескольких полей radio, в отличии от checkbox, может быть включено.
Submit - отображает кнопку, при нажатии на которую все данные из формы отправляются сценарию, указанному в атрибуте action тэга <form>.
Reset - при нажатии на эту кнопку, вся введённая информация в форму онулируется.
Тэги <textarea></textarea>
Тэг <textarea> определяет многострочную область ввода. Этот тэг имеет также несколько атрибутов. Вот пример: <textarea name="имя" rows="10" cols="20">Этот текст будет находится в области ввода, данного типа, пользователь может изменить этот текст</textarea> Атрибуты rows и cols определяют высоту и длину соответственно. "имя" - уникальное имя в пределах одной формы.
Тэги <select></select>
Эти тэги создают список, каждый из вариантов которого задаётся тэгом <option>. Тэг <select> может нести в себе атрибуты size, name и multiple. Думаю с size и name всё понятно, а вот c multiple, наверное не очень. Итак, этот атрибут задаёт режим при котором пользователь будет выбирать что-то из списка. Если этот атрибут присутствует, то пользователь может выбрать несколько значений из списка, а если же он опущен, то можно выбрать только одно значение.
Чтобы всё было более понятно, давайте рассмотрим всё на примерах:
Создаём страницу и пишем в неё данный код:
<html>
<head><title> Анкета</title>
<h 3 align=center>Анкета</h 3>
<form action=script.php method=post>
<input type=hidden name=hidden value="Это скрытый текст">
<b> Введите пожалуйста пороль:</b>
<input name= pass type=password>
<b> Заполните следующие данные пожалуйста:</b><br>
Фамилия <input type=text size=14 name=fam><br>
Имя<input type=text size=14 name=name><br>
Отчество<input type=text size=14 name=ot>
<b>Сколько вы имеете судимостей:</b><br>
<select>
<option>10
<option>20
<option>30
</select><p>
<b>Сколько вам лет?</b><br>
<input name=1 type=radio name=1 > От 1 до 10<br>
<input name=1 type=radio name= 2> От 10 до 18<br>
<input name=1 type=radio name=3 > От 18 до 30<br>
<input name=1 type=radio name=4 > От 30 до 50<br>
<input name=1 type=radio name=5 > От 50 до 100<br>
<input name=1 type=radio name=6 >От 100 до 200<br><p>
<b>Наличие хронических заболеваний:</b>
<input type=checkbox><br><p>
<b>Особые примечания:</b><br>
<textarea name=texta rows=4 cols=30 >
</textarea>
<input type=submit value=Всё> <input type=reset value=заново>
</form>
А вот чего получится:
HTML-формы и css.
В хтмл-формах также могут активно использоваться и css. Применение css значительно украшает форму, помогая вэбмастеру максимально приблизить её внешний вид к дизайну сайта. Итак, рассмотрим это на примере. Например мы хотим создать стильную панель поиска для сайта, для этого пишем в страницу такой код:
<form method="POST" action="search.php">
Поиск по сайту: <input type="text" name="whatdoreplace" size="25" style='BORDER-RIGHT: #3E9EBB 1px solid; BORDER-TOP: #3E9EBB 1px solid; BORDER-LEFT: #3E9EBB 1px solid; COLOR: #000000; BORDER-BOTTOM: #3E9EBB 1px solid; BACKGROUND-COLOR: RED
'>
<INPUT TYPE=radio name=where value=foto >фото
<INPUT TYPE=radio name=where value=mp3>mp3
<input type="submit" value="поиск" name="search" style='BORDER-RIGHT: #3E9EBB 1px solid; BORDER-TOP: #3E9EBB 1px solid; BORDER-LEFT: #3E9EBB 1px solid; COLOR: #F1F1F1; BORDER-BOTTOM: #3E9EBB 1px solid; BACKGROUND-COLOR: RED
'>
</FORM>
А вот результат:
Можете поэкспериментировать и сделать лучше - ваше право, я показал только принцип использования css в HTML-формах.
Итак, теперь вы можете создавать любые формы. Но, как вы уже поняли, форма это всего лишь способ передачи данных скрипту, и сама по себе она, разумеется, работать не будет. Теперь, когда Вы уже знаете как создавать формы, самое время начать изучать какой-нибудь язык программирования, иначе зачем всё это нужно. Но, как я уже обещал, я в этой статье говорить о каком-либо языке программирования я не буду.
При создании своего собственного сайта нужно еще и позаботиться о его внешнем виде и удобной навигации. В этом поможет Xara Webstyle , текущая версия 3.1658; trial, $69) — мощный и, пожалуй, лучший из известных мне пакетов, обеспечивающий простое и быстрое создание различных баннеров, логотипов, узоров, линий, объемных надписей, всплывающих меню, кнопок, фоновых рисунков, маркеров для списков и проч.
Программа имеет очень удобный интерфейс и гибкие настройки при создании проекта, а потому подойдет и начинающему «оформителю», и опытному дизайнеру. Хотя ее интерфейс английский, это не будет помехой даже слабо знающему язык человеку.
Красиво оформленное меню, встречающее нас при первом запуске, предлагает на выбор одиннадцать подменю, которые, собственно, и содержат интересующие нас инструменты.
BannerAds — за этим пунктом скрывается, как несложно догадаться из названия, мастер по созданию баннеров. Первый шаг — выбор дизайна. Здесь на 18 страницах размещены 73 оригинальных почти готовых баннера различной тематики: от New music и до Selling house. Далее — заполнение заготовки текстом, выбор цвета для надписей и некоторых частей баннера. Также одним щелчком можно выбрать одну из 266 предложенных текстур для фона. Следующим шагом устанавливаем нужный размер и переходим к кнопке Save — сохранение созданного творения. Быстрый, несложный и, главное, эффективный процесс.
Легким движением руки возвращаемся на Start одноименной кнопкой и выбираем второй пункт — Logos (логотипы). Тут нас поджидают 39 шаблонов. При использовании символьных шрифтов они дают возможность создать практически неограниченное количество заметно отличающихся друг от друга логотипов. Пройдя все тот же несложный путь, встречаем в «Мастере создания» новый пункт — Shadow. Он добавляет некоторым элементам логотипа тень. Также кнопка Save тут обладает расширенным ассортиментом возможностей. Изображение можно сохранить в одном из трех форматов с нужным качеством, предварительно узнав его «вес», или просмотреть в браузере.
Примерно таким же способом можно создать вкладки в меню Headings (приготовлено около 258 заготовок различного дизайна) и маркеры в меню Bullets (всего 216 маркеров).
Dividers — это инструмент для изготовления разделителей. Хотя кое-что можно использовать и для украшения.
От дизайна переходим к цвету. Всевозможные оттенки сортируются четырьмя способами: от красного к зеленому, от синего к красному, от зеленого к синему и беспорядочно. На выбор представлены 166 линий-разделителей и лент.
Следующий пункт главного меню — Backgrounds. Здесь в четыре шага можно выбрать и сохранить фон для web-страницы (133 фоновых рисунка).
Не менее важный, но более интересный следующий пункт — 3DHeadings (создание объемного текста — например, для заголовков). По знакомым тропинкам (дизайн, цвет, текст, текстура и тень) подбираемся к дополнительным возможностям этого инструмента — изменение исключительно 3D-эффектов (кнопка Bevel). Глубина 3D-текста, округление краев, создание контурной надписи — все это можно сделать за считанные минуты.
Последний шаг перед сохранением — кнопка NavBars. О ее использовании я расскажу далее. Всего представлено 83 прекрасных шаблона.
Как же обойтись на сайте без кнопок? Xara Webstyle поможет и в этом. Включаем инструмент Buttons. Затратив пару минут, получаем желаемый результат. Сложностей особых при сознании кнопок возникнуть не должно, так как все шаги известны и испытаны. Среди 371 заготовок множество красивых и оригинальных.
Последний инструмент, на который стоит обратить свое внимание — NavBars&Menus. Очень занимательная и полезная вещица. Предназначена для создания всплывающих меню (удобная и эффектная навигация по сайту). Кто с этим ни разу не встречался, поясню. Это похоже на несколько кнопок «Пуск», расположенных горизонтально в строку или вертикально в столбик. Единственное отличие — выглядят они гораздо красивее. Начнем с дизайна: 126 пар меню, существенно отличающихся друг от друга, смогут удовлетворить самые строгие запросы дизайнера. Выбрав цвет и размер будущего меню, переходим к собственно его наполнению. В этом поможет кнопка NavBars. Здесь можно одним нажатием на Add добавить кнопки в меню, всплывающие подсказки, назначить адрес, открываемый при нажатии. Причем, глубина всплывающих меню неограниченна. Замете, что ранее для изготовления таких вещей требовались хорошие знания JavaScript, а теперь с этим справится даже начинающий юзер.
Немного приятных мелочей: Xara Webstyle позволяет сохранять проекты, фильтровать объекты по стилю и назначению, предварительно просматривать полученный результат в верхней части окна. Результат: имея огромные возможности и относительно небольшой размер (29.3 Мб), Xara Webstyle может претендовать на место главного помощника web-дизайнера.
Вроде бы вы сделали все правильно, но ваш сайт почему-то не выглядит или не работает, как ожидалось, в последних версиях браузеров.
Вы написали правильный стандартный XHTML код и стандартный CSS. Вы воспользовались стандартной спецификацией для работы с DOM (Document Object Model), чтобы управлять динамическими элементами на странице. И все-таки, в броузерах, которые казалось бы сделаны с соблюдением именно этих стандартов, ваш сайт не работает. Скорей всего, ошибка кроется в неправильном заголовке DOCTYPE.
Эта небольшая статья расскажет вам о заголовках DOCTYPE, которые работают, а также объяснит практическое и теоретическое значение этого, казалось бы отвлеченного от реальности, тега.
Что такое DOCTYPE?
Согласно спецификациям HTML и XHTML тег DOCTYPE (что означает "объявление типа документа") сообщает валидатору, какую именно версию (X)HTML вы используете в своей странице. Этот тег должен всегда находиться в первой строке каждой страницы. Тег DOCTYPE - ключевой компонент web-страниц, претендующих на соответствие стандартам: без него ваш код и CSS не пройдут проверку валидатором.
Как было сказано в предыдущих статьях в других статьях на других сайтах), тег DOCTYPE также важен для правильного отображения и работы страницы в броузерах, соответствующих стандартам (Mozilla, IE5/Mac, и IE6/Win).
Тег DOCTYPE, в атрибутах которого указывается полный URI (полный web-адрес), сообщает броузерам, что страницу нужно вывести с соблюдением определенного стандарта или подвида этого стандарта.
Если вы будете пользоваться неполным тегом DOCTYPE, устаревшим его видом, или вообще забудете про него, броузер перейдет в "загадочный" режим и будет исходить из предположения, что вы писали код страницы с ошибками и вольно отступали от стандартов, т.е. так, как писали в конце 90-ых годов.
В этом режиме броузер попытается разобрать вашу страницу по правилам обратной совместимости и выведет на экран, например, CSS так, как его вывел бы Internet Explorer 4-ой версии, а DOM будет работать так, как он работал именно в этом броузере (IE переключается в свой старый DOM, а Mozilla и Netscape 6 переключается вообще в бог знает что).
Понятно, что для вас эти выкрутасы не желательны. Но именно это вы и получите, если будете пользоваться неполным или неправильным тегом DOCTYPE. Данная статья попробует исправить эту вашу ошибку.
(Внимание: броузер Opera не играет по таким правилам; он всегда пытается отобразить страницу так, как если бы она соответствовала стандартам. Слава Опере! С другой стороны, Opera пока не полностью поддерживает стандарт W3C DOM, но работа над этим уже ведется.)
Где же взять правильный DOCTYPE?
Так как теги DOCTYPE чрезвычайно важны для работы Web-а по стандартам, и так как консорциум W3C является ведущей организацией, создающей стандарты для Web-а, следовало бы ожидать, что на сайте W3C будет представлен список всех вариантов тега DOCTYPE, и казалось бы эту информацию на сайте W3C можно найти быстро и просто в каком-то определенном разделе. Но это не так, по крайней мере на момент написания этой статьи.
W3.org - это не сайт со статьями как A List Apart, WebReference или Webmonkey. Он не создан в помощь web-дизайнерам, разработчикам и авторам сайтов, и он не занимается распространением новейшей информации и полезных советов. Это не его задача.
Да, иногда W3C публикуетсерии учебных статей, хотя большинство web-разработчиков об этом даже и не знает. Но в основном, сайт W3C содержит собрание предложений, проектов и Рекомендаций, которые написаны инженерами для инженеров. И когда я говорю об инженерах, я не имею в виду простых специалистов в области web-разработок, таких спецов, как вы и я. Я имею в виду инженеров, по сравнению с которыми мы выглядим полными болванами.
Я могу потратить весь день в поисках правильных тегов DOCTYPE на сайте w3.org, но не найду ни одной страницы, где они перечислены все вместе. Если же вам все-таки удастся найти какой-нибудь тег DOCTYPE (например, упоминаемый в какой-нибудь Рекомендации или Рабочем проекте), скорей всего окажется, что на вашем сайте он работать не будет.
По всему сайту W3C разбросаны теги DOCTYPE, где в атрибутах отсутствует URI, и теги DOCTYPE, содержащие в атрибутах относительный URI, связанный с документами, находящимися на том же самом сайте W3C. Если вы возьмете этот тег с сайта W3C, перенесете его на свой сайт и вставите в свои страницы, относительный URI будет указывать на несуществующие на вашем сайте документы, следовательно напрасно пропадет ваш труд и усилия броузера.
Например, на многих сайтах можно встретить в страницах следующий вариант тега DOCTYPE, который был без всяких изменений перенесен с сайта w3.org:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
Посмотрите на последнюю часть тега DOCTYPE ("DTD/xhtml1-strict.dtd"
). Обратите внимание, что это относительная ссылка на документ, расположенный на сайте W3C. Так как целевой документ находится на сайте W3C, а не на вашем, этот URI для броузера бесполезен.
А выглядеть DOCTYPE должен вот так:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
Обратите внимание, что этот вариант DOCTYPE содержит в конце полный вариант URI. А так как тег указывает на правильное расположение документа, броузер знает, где этот документ надо найти в сети, и следовательно выведет вашу страницу в том стандарте, который вы упомянули в DOCTYPE.
Правильные варианты тега DOCTYPE
Итак, каким же вариантом тега DOCTYPE надо пользоваться? Очень хорошо, что вы задали этот вопрос. Ниже перечислены полные варианты тега DOCTYPE для различных нужд:
Стандарт HTML 4.01 Strict (строгий), Transitional (переходный), Frameset (с фреймами)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "
Стандарт XHTML 1.0 Strict (строгий), Transitional (переходный), Frameset (с фреймами)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
Стандарт XHTML 1.1 DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
Что дальше?
Как вы можете внести свой вклад в распространение стандартов в Web? Перво-наперво, поместите в закладки данную страницу (либо просто сохраните ее на своем компьютере), а также проверьте, вставляет ли ваш web-редакторв в ваши страницы тег DOCTYPE, а если вставляет, - правильный ли вариант тега он использует?
Многие разработчики ПО просто скопировали неполные варианты тега DOCTYPE с сайта W3C в свои программы. И в результате: вы полагаетесь на программу, которая вставляет неправильный вариант тега, броузер впадает в "загадочный" режим, а вы безуспешно бьетесь над загадкой, почему ваши страницы не работают, как надо.
Стоит также написать тем ребятам, что делают ваш любимый web-редактор, и показать им, как выглядит правильный тег DOCTYPE, после чего, вежливо попросить их внести изменения в новую версию программы. (В некоторых случаях, вы сможете даже внести изменения в программу сами.)
В ближайшем будущем
У нас есть все причины надеяться, что W3C скоро выложит полный, точный и удобный список всех вариантов тега DOCTYPE на своем сайте, а также опубликует другую важную информацию. И эту информацию легко будет найти. К стати, в эту статью внес свой вклад Карл Дабост (Karl Dubost) - менеджер W3C по обеспечению качества (Conformance Manager of W3C's Quality Assurance team).
Кроме того, проект The Web Standards Project скоро будет переделан (очень скоро), и на нем тоже можно будет найти эту информацию.
Но так как каждый день создаются и выпускаются в сеть все новые и новые сайты, эта информация вам нужна уже сейчас, так вот она - пользуйтесь.
Создание сайта. Звучит заманчиво, но стоит только начать что-то делать, как сразу понимаешь, что ничего у тебя не выйдет. В чем же дело? А дело в том, что популярные среди гуру программы по созданию web-страниц сложны в изучении и непонятны обычному пользователю, который даже не знает, как программировать на HTML. К счастью, все не так плохо.
NetObjects Fusion 7 — это именно та программа, которая поможет быстро создать качественный web-сайт. Я просто уверен, что данный продукт вам понравится :-). Что ж, перейду непосредственно к описанию. Начну с системных требований: Pentium 133 (желательно Pentium 200); Microsoft Windows 95—XP; 100 Мб на жестом диске (для полной функциональности); 32 или 64 Мб ОЗУ; Microsoft Internet Explorer 5.5 или выше.
Итак, запускаем программу. При загрузке вас встретит Site Wizard, что-то вроде мастера по созданию сайтов, в котором можно выбрать структуру вашего будущего web-проекта: Personal (создание домашней страницы) и Business (для тех, кто занимается бизнесом). Business в свою очередь делиться на Products (для тех людей, кто занимается продажей каких-либо товаров), Services (если вы предоставляете услуги), Organizations (для людей, которые хотят сделать web-сайт о своей организации). Можно также отказаться от создания сайта с помощью мастера и выбрать пункт меню File > New Site > Blank Site, т.е. создать чистую страницу. После заполнения предложенной мастером анкеты (адрес, Ф.И.О. и прочее) программа автоматически разместит указанную вами информацию на страницах создаваемого проекта. Лично я создавал свой web-сайт мастером, а потом редактировал его под себя, поскольку все поля, размещенные мастером на страницах, были на английском языке. Но прежде чем редактировать только что созданный сайт советую сохранить его копию, так как она является готовым англоязычным «зеркалом» проекта. Далее вам предстоит выбрать тип оформления из восьми примеров, причем каждый из них делится на три цветовых варианта (всего стилей оформления доступно 43, чего не встретишь ни в одном web-редакторе). Теперь программа предлагает сохранить сайт, который был создан на основании собранной мастером информации. Конечно, можно сразу же опубликовать данный web-ресурс в Интернете, но желательно его предварительно отредактировать.
Перейдем к главной панели, на которой расположены следующие кнопки: Online (интернет-ресурсы, рекомендуемые для посещения в случае, если вам необходимо больше стилей оформления или картинок, выбор последних отредактированных сайтов), Site (карта сайта), Page (редактирование страницы), Style (стиль оформления), Assets (список всех файлов и ссылок, которые есть на странице), Publish (публикация плодов ваших усилий в Интернете). С помощью NetObjects Fusion 7 вы легко сможете добавлять к страницам элементы Flash, Active X, Java, фотогалереи и множество других прибамбасов. Встречались ли вы когда-либо с проблемой добавления на сайт его карты? Наверное, большинству из вас это знакомо. Так вот, с помощью NetObjects Fusion 7 вы не будете просиживать за компьютером дни и ночи, делая обыкновенную карту сайта, а просто щелкните мышкой по кнопке Site mapper и укажете место для ее размещения. На мой взгляд, это очень удобно. Также каждый пользователь может без особых усилий создать меню для своего сайта на JavaScript’е — элемент, который довольно сложно внедрить в сайт при помощи обычных HTML-редакторов. Без особых усилий web-дизайнер может добавить в страничку ссылку, кнопки любого типа, бегущую строку — последняя легко делается при помощи нескольких нажатий мышки, а выглядит очень эффектно. Fusion 7 позволяет подсчитать количество введенных пользователем символов, абзацев и прочую полезную информацию.
Данный программный продукт имеет очень много уникальных преимуществ, выгодно отличающих его от прочих подобных программ. Среди них следует отметить восстановление сайта после ошибки или выключения электропитания. Например, ваш компьютер завис во время работы с программой , а вы не успели его сохранить. Не волнуйтесь, при поставарийном открытии вашего творения программа полностью восстановит его. Собственный формат программы позволяет сохранить web-сайт в одном файле (простой и профессиональный подход, не так ли?), что полезно в том случае, если вам хочется отнести сайт другу или кому-то еще, — для оценки или просто похвастаться :-).
Также стоит отметить такие возможности NetObjects Fusion 7 как создание слайд-шоу, всплывающих окон, защиту от печати, вставку мета-тэгов. Уровень совместимости поможет вам настроить работу вашего сайта даже под Linux и MacOS. В программе предусмотрена проверка правописания — довольно редкая функция в программах для web-дизайна. В отличие от многих тяжеловесных пакетов, NetObjects Fusion 7 не оставляет в коде страницы «мусора», замедляющего ее загрузку. Если в чем-то вам будет сложно разобраться, то в комплекте с программой идут: документация на английском языке размером около 20 Мб, прочитав которую, вам наверняка все станет понятно; пример сайта, созданного этим программным продуктом; почти 60 примеров оформления фотогалерей с готовыми фотографиями.
Итак, давайте оценим преимущества NetObjects Fusion 7:
наличие мастера;
дружеский пользовательский интерфейс;
множество готовых стилей оформления страниц;
минимальные затраты времени на создание web-ресурсов;
возможность публикации сайта в Сети без посторонних утилит;
встроенный веб-браузер;
возможность обновления через Интернет;
наличие карты создаваемого сайта;
возможность просмотра страничек в любом внешнем веб-браузере;
простейшее добавление фреймов;
возможность добавления элементов Flash, Active X, Java, фотогалерей;
собственный формат создаваемых файлов.
Как сделать свой сайт.
Этапы создания своего сайта.
Прежде, чем приступить к созданию своего сайта, необходимо убедиться в том, что Ваше желание сделать свой сайт намного сильнее желания выспаться. Вековой опыт веб-мастеров показывает, что темное время суток самое благоприятное для создания сайта. Поэтому, если Вы готовы проводить ночь, стуча по клавишам и не можете уснуть в предвкушении толпы посетителей на Ваш сайт, то можно начинать делать свой сайт.
Процесс создания сайта носит многосторонний характер. Для того, чтобы сделать сайт приходится решать различные задачи. Читатель должен понять, что создание сайта это не только дизайн и HTML верстка, это еще и программирование, подбор информационного наполнение, реклама (раскрутка) сайта.
Работу по созданию своего сайта, условно можно разбить на несколько этапов.
Подготовительный
Дизайн
Web-программирование
HTML верстка сайта
Размещение сайта в сети
Раскрутка и администрирование (поддержка) сайта
Насколько ответственно Вы подойдете к выполнению каждого из этапов, и будет определять качество и посещаемость Вашего сайта. Какие же задачи приходится решать на каждом из этих этапов ? Подготовительный этап создания своего сайта.
На этом этапе Вам необходимо определиться с тематикой, которой будет посвящен Ваш сайт, продумать информационное наполнение и подобрать материалы, которые будут опубликованы. Для этого возьмите ручку и напишите список разделов Вашего будущего сайта, затем продумайте и подготовьте материалы для каждого раздела. На этом этапе может выясниться, что раздел окажется всего один, да и тот будет состоять с одного предложения. Подумайте, а интересен ли такой сайт кому то, кроме Вас. Если ответ отрицательный, то к остальным этапам переходить еще рано. Но вот у Вас уже набралось несколько разделов с интересной информацией, теперь самое время перейти к дизайну.
Дизайн вашего сайта это его лицо. Это один из самых интересных и творческих этапов. На данном этапе Вы должны определиться, как будет выглядеть Ваш сайт в целом, и какие графические элементы Вам нужны. Затем Вам придется нарисовать все необходимые графические элементы своего сайта, но можно воспользоваться и уже созданными рисунками из различных клипартов. Вам также необходимо будет определиться со структурой каждой страницы и решить какая цветовая схема наиболее подходит для вашего сайта. Если с дизайном Вы уже определились, то можно переходить к следующему этапу.
В принципе данный этап может и отсутствовать. Если Вы не планируете на своем сайте не каких досок объявлений, гостевых книг, форумов или других элементов придающих Вашему сайту интерактивность, то данный этап Вы можете смело пропускать. Ну а если Вашему сайту все же нужны элементы интерактивности, тогда придется изучить скриптовый язык, например PHP или Perl. Необходимо отметить, что данный этап очень тесно связан с следующим, HTML версткой, и выделяется он достаточно условно. И вот вы осилили web-программирование или пропустили данный этап и теперь готовы взяться за HTML верстку своего сайта. HTML верстка сайта.
Теперь Вам предстоит соединить результаты своих трудов, полученные на всех предыдущих этапах. И здесь Вам не обойтись без знания того, что является основой из основ любого сайта, в том числе и Вашего, это HTML. HTML - это специальный язык разметки текстов, созданный специально для WWW страничек. При помощи данного языка Вы сможете установить графические элементы на Ваши странички, наполнить их нужной информацией, а также связать их между собой гиперссылками. Если Вам удалось пройти все выше перечисленные этапы создания своего сайта, то на текущий момент Вы должны располагать набором HTML страничек, связанных между собой гиперссылками и кучей (или не кучей) графических элементов в виде файлов с расширением .gif и .jpeg. Настал момент разместить все это в сети.
Данный этап не менее важен чем остальные. Прежде чем решать технические аспекты по загрузке своего сайта, Вам прийдется решить такие задачи как выбор хостинга (выбор сервера в сети на котором будет располагаться Ваш сайт) и выбор доменного имени для своего сайта. Сейчас достаточно много ресурсов в сети предоставляющих услуги хостинга, среди них есть и бесплатные, правда бесплатные понятие условное, в данном случае под бесплатным подразумевается, что с Вас не берут денег. Но как известно бесплатным бывает только сыр в мышеловке. Поэтому, если Вы выбираете бесплатный хостинг, то будте готовы к тому, что на всех страничках вашего сайта будет присутствовать баннер, вставляемый автоматически сервером. Существует и еще один недостаток бесплатного хостинга, в большинстве случаев Вам не будет предоставлена возможность использовать свои скрипты на PHP или Perl. Кроме недостатков существует и один положительный момент, Вам не прийдется отдельно регистрировать доменное имя, Вы его получите в виде ваше_назв.hut.ru или ваше_назв.narod.ru. Но вот хостинг Вами выбран, доменное имя зарегистрировано, теперь необходимо все Ваши странички загрузить на сервер. Для этого понадобится FTP клиент (СuteFTP, FAR или любой другой). Указываете адрес FTP сервера, свой логин и пароль полученные при регистрации на сервере, на котором предоставили Вам хостинг, далее копируете (загружаете) все файлы из которых состоит Ваш сайт на сервер. После завершения этой операции сайт созданный Вами станет доступным в сети. Но это еще не все. Дело в том, что для того, чтобы Ваш сайт посещал кто-то кроме Вас, придется приложить усилия по раскрутке (рекламе) своего сайта.
Раскрутка и администрирование (поддержка) сайта.
Данный этап в принципе не имеет окончания. Для того, чтобы на Ваш сайт приходили посетители Вам придется постоянно прилагать усилия по его рекламе, а также регулярно вносить изменения и пополнять свежей информацией. Способов раскрутки сайтов достаточно много и все они обладают своими плюсами и минусами, и применять их желательно комплексно, не зацикливаясь на одном. Только при таком подходе можно ожидать притока посетителей на свой сайт. Вот основные способы рекламы в сети: регистрация в поисковых системах, каталогах, досках объявлений; участие в баннерообменных сетях; обмен ссылками с другими сайтами; создание собственной рассылки.
Вот и все на текущий момент. Я понимаю, что данная статья не дала ответов на многие вопросы, а только увеличила их количество. Но я надеюсь, что мне удалось показать, насколько сложен и многогранен процесс создания и поддержки сайта. И если Вас не пугают все те задачи, которые придется решать при создании своего сайта, то можете приступать к этому творческому процессу.
Сначала определимся с терминологией. Под интерактивными страничками я понимаю такие, в которых реализован интерфейс с какой-либо программой, выполняемой на стороне сервера. Форма на web-страничке принимает от пользователя некие данные, и броузер передает их web-серверу, который и запускает нужную программу. Программа после того, как отработала запрос, возвращает web-серверу результат, а уж он формирует на лету HTML-страничку и отсылает ее обратно броузеру.
Итак, что же мы можем сделать, используя интерактивность? Самое известное, что приходит в голову - это счетчики, гостевые книги, формоотправители, он-лайн магазины, интерфейсы к базам данных. Практически, можно сделать все, что угодно. Все зависит только от умения программиста.
Как это осуществляется технически? А вот как - на стороне сервера мы размещаем нужные программы, базы данных,.. и конфигурируем web-сервер таким образом, чтобы он смог передавать запросы пользователей из сети обрабатывающей программе и получать от нее результат. Делается это посредством протокола CGI - Common Gateway Interface (что по-русски звучит как "общий шлюзовый интерфейс"). CGI - это набор правил, по которым сервер передает запрос программе. Любая программа, написанная таким образом, чтобы удовлетворять этим требованиям, сможет использоваться на Web-сервере.
Язык программирования, на котором пишется программа, большого значения не имеет, и может быть использован любой. Наиболее популярным языком программирования, используемым для написания несложных программ, следует признать PERL - язык, первоначально разработанный для написания отчетов и идеально подошедший для несложных CGI-программ. Текст языка на PERL принято называть скриптом (не путать с JavaScript - программа на PERL выполняется на стороне сервера, в то время как JavaScript - на стороне клиента). Язык является интерпретирующим, то есть анализирующим текст программы в процессе выполнения. Для работы PERL на web-сервере должен быть установлен и правильно сконфигурирован соответствующий интерпретатор.
Таким образом, интерактивные странички можно разделить на две части: форма и программа. В форме нам нужно правильно описать все элементы интерфейса и указать путь к выполняемой программе. Как видите, все не так уж сложно. А что делать, если Вы не программист, а Вам нужна несложная программа? В этом случае можно воспользоваться архивом готовых скриптов, большинство из которых бесплатны. Все типичные задачи давно уже решены и отлажены. Это гостевые книги, счетчики, листы рассылок и т.п. Нужно просто найти нужную и внимательно прочитать описание к ней. После этого остается только правильно разместить элементы в форме и указать специфические параметры для данного скрипта. Более сложные программы уже приходится писать программистам, имеющим достаточный опыт для этого.
Отправка формы по почте
Давайте разберем типичный пример - отправку формы по почте. Для этого мы воспользуемся готовой программой из архива Matt Wright, предназначенной для отсылки содержимого формы по почте -
Создание формы
Начнем, пожалуй, с формы. Описание формы будет заключаться между тэгами <form> и </form> и содержать внутри себя элементы формы. Мы сделаем самый минималистический вариант формоотправителя, который будет содержать следующие поля: имя, электронный адрес, текст сообщения. HTML-код нашей странички выглядит следующим образом:
<html>
<head><title>Форма для отправки по почте</title></head>
<form name="Request" action="/cgi-bin/formmail.pl" method="post">
<input type=hidden name="recipient" value="[email protected]">
<input type=hidden name="subject" value="Запрос информации">
Ваше Имя: <br>
<input type=text name="Имя"><br>
E-mail: <br>
<input type=text name="E-mail"><br>
Сообщение: <br>
<textarea name="Сообщение"></textarea><br><br>
<input type=submit value="Отослать">
<input type=reset value="Очистить">
</form>
Этот скрипт нужно сконфигурировать и разместить на web-сервере в специальном каталоге, где располагаются CGI-программы. Обычно он называется cgi-bin (для уверенности проконсультируйтесь с вашим провайдером - предоставляет ли он услуги по размещению CGI-скриптов, и как называется каталог для размещения скриптов). А на страничке - описать форму. Таким образом, нам нужно подготовить два файла: создать HTML-форму и сконфигурировать Perl-скрипт под наши нужды.
Немного разъяснений по вышеприведенному коду. Обратите внимание на параметр action в тэге <form> - он определяет адрес нашего скрипта (.pl - стандартное расширение для программ, написанных на PERL). Первые элементы в форме - это специальные скрытые поля для передачи информации скрипту: поле recipient определяет e-mail, на который мы хотим отослать содержимое формы, а поле subject - строку, которая будет появляться как "тема письма". Далее идет уже описание непосредственно полей формы. Их может быть сколько угодно, но каждое из них должно иметь имя (параметр name в тэге <input>), т.к. результатом работы скрипта будет письмо, в котором каждая строка состоит из пары значений: имени поля и его содержимого. И заканчивается форма двумя кнопками, служащими для отправки сообщения (submit) и очистки формы до начального состояния (reset).
Конфигурирование скрипта
Теперь сконфигурируем скрипт. Опуская несущественные для нас детали, листинг нашего скрипта можно представить так:
#!/usr/bin/perl
$mailprog = '/usr/lib/sendmail';
@referers = ('');
# Здесь располагается код скрипта.
В данном случае вся конфигурация сведется к установке IP-адреса компьютера, на котором расположен web-сервер, и конфигурирования путей для программ perl и sendmail. Первая - непосредственно интерпретатор языка PERL, а вторая - это программа, к которой обращается скрипт, и которая осуществляет посылку сообщения по почте. Адрес расположения PERL-интерпретатора всегда задается первой строкой в скрипте, и в данном случае программа доступна по адресу /usr/bin/perl. Расположение программы sendmail задается второй строчкой в нашем листинге. И, наконец, третья строчка задает имя и IP-адрес web-сервера (для примера я указал параметры моего сайта).
Вот, практически, и все. Наш скрипт осталось только переписать в каталог. Но тут есть одна тонкость - дело в том, что скрипт будет располагаться на UNIX-машине, а текст в UNIX-формате имеет одно отличие от Windows: конец строки в UNIX обозначается символом возврата каретки <CR>, а в Windows - парой символов: перевод строки <LF> и возврат каретки <CR>. Если переписать такой файл по FTP в режиме BINARY, то скрипт работать не будет!!! При копировании скрипта на web-сервер нужно установить режим ASCII, который автоматически преобразует концы строк к UNIX-формату.
У скрипта FormMail есть много дополнительных и очень удобных возможностей. Например - переадресация странички с подтверждением отправки сообщения или проверка правильности заполнения полей. Если Вас это заинтересует, то сходите на страничку Мэтта, и там Вы найдете не только описание FormMail, но и много других полезных скриптов. В этой статье я хотел просто показать, как применять готовые скрипты для нужд своего сайта, и поэтому опустил все несущественные детали и остановился на рассмотрении практических вопросов.
HTML + CSS + JavaScript = Web-меню
Если вы еще не догадались, чем мы сейчас будем заниматься, тогда говорю прямо — разработкой главного меню для домашнего (впрочем, для более серьезных проектов здесь тоже нет ограничений) web-ресурса.
Итак, приступим! Первое, о чем нужно сказать, это то, что меню будет представлять собой гипертекстовую разметку с использованием каскадных таблиц стилей (CSS). Собственно внутреннюю логику управления мы напишем в виде сценария на языке JavaScript. Должен сразу заметить, что по понятным причинам меню будем разрабатывать для браузера MS Internet Explorer. Надеюсь, вас это обстоятельство сильно не смутит :-), а посему начнем.
Сначала сделаем гипертекстовую разметку страницы.
Думаю, элементы html, head и title пояснения не требуют. В элементе style с помощью нотации @import url(menu.css) мы задаем URL файла, в котором находится каскадная таблица стилей для меню. В элементе script с помощью атрибута src="menu.js" мы задаем url файла, в котором будет содержаться сценарий на языке JavaScript. Далее в элементе задаем обработчики (функции обработки) для событий onResize (изменение размера окна браузера) и onLoad (загрузка страницы). Эти события будут обрабатываться соответственно функциями onWindowResize() и init(), которые мы определим позже в файле сценария menu.js.
Я специально не вставил меню в предыдущий фрагмент гипертекстовой разметки, чтобы выделить структуру разрабатываемого проекта. Сейчас я приведу гипертекстовую разметку самого меню. Следующий фрагмент нужно поместить в блочный элемент:
. Этот скрипт нужно сконфигурировать и разместить на web-сервере в специальном каталоге, где располагаются CGI-программы. Обычно он называется cgi-bin (для уверенности проконсультируйтесь с вашим провайдером - предоставляет ли он услуги по размещению CGI-скриптов, и как называется каталог для размещения скриптов). А на страничке - описать форму. Таким образом, нам нужно подготовить два файла: создать HTML-форму и сконфигурировать Perl-скрипт под наши нужды.
Давайте разбираться. Первый блочный элемент div, как видно из комментария, служит своеобразным контейнером, в котором будут находиться пункты главного меню. Другими словами, это будет панель главного меню. Здесь через атрибут id мы присваиваем этому элементу имя mm. По этому имени мы будем из сценария обращаться к соответствующему элементу. Также через атрибут class назначаем этому элементу класс свойств MainMenu, который позже определим в файле каскадной таблицы стилей menu.css.
Разберем теперь фрагмент первого элемента якоря a, который находится внутри div. Этот элемент является первым пунктом меню, а поэтому присвоим его идентификатору значение m1 (второму пункту присвоим m2, третьему — m3 и т.д.). Этот элемент содержит также обработчики событий onmouseover (указатель мыши над элементом), onmouseout (указатель мыши покинул элемент) и onclick (щелчок кнопки мыши по элементу). Функции обработки, соответственно, — mOverMain(n), mOutMain(n) и mClick(n), где n — номер пункта меню. Для первого пункта меню n равно единице (для второго — 2, третьего — 3 и т.д.). Этот номер нам понадобится при обработке. В элемент a вписываем имя пункта меню. Все остальные пункты меню строятся по той же схеме, с той лишь разницей, что идентификатор должен содержать букву m плюс точный порядковый номер пункта меню (m1, m2, …, m10, m12, …). Функции обработки должны принимать в качестве параметра точный порядковый номер текущего пункта меню.
Давайте договоримся: меню, которое выпадает при щелчке кнопки мыши на каком-нибудь пункте панели главного меню, будем называть «подменю». Теперь посмотрим на следующий блочный элемент div. Он служит контейнером для первого подменю. Для его идентификации присваиваем его идентификатору значение sm1 (для второго подменю — sm2, для третьего — sm3 и т.д.). Через свойство class назначаем этому элементу класс свойств SubMenu, который определим в файле menu.css.
Внутри блочного элемента div находятся четыре якоря a. Они играют роль пунктов первого подменю. В принципе их может быть неограниченное количество. Разберем структуру первого якоря. Его идентификатор принимает значение item1_1, а это значит, что он принадлежит первому подменю и сам выступает его первым пунктом. В общем виде для идентификации пунктов меню, принадлежащих различным подменю, идентификаторам будем присваивать значения вида itemI_J, где I — номер подменю, которому принадлежит данный пункт, J — номер пункта в данном подменю (I, J принимают значение из множества натуральных чисел). Например: значение идентификатора item21_13 означает, что этот пункт принадлежит 21-му подменю, в котором на его долю приходится 13-й порядковый номер (хотя я сомневаюсь, что кому-то понадобится панелька с 21 пунктом меню :-)). Атрибуту href нужно присвоить url, на который будет ссылаться данный пункт подменю. Хоть в принципе, вместо url можно написать какой-нибудь сценарий. Здесь уже вы решаете, что должно происходить при щелчке на данном пункте меню, и сами пишете (если нужно) обработчик (функцию обработки) этого события. Как видим, в этом элементе заданы обработчики событий onmouseover и onmouseout. Это соответственно функции обработки mOverItem(n) и mOutItem(n). Здесь n — номер пункта в данном подменю. Элемент br используется для принудительного перехода на новую строчку (следующий пункт подменю должен начинаться с новой строчки). Аналогичным образом строятся и другие подменю для каждого пункта главного меню.
Будем считать, что с гипертекстовой разметкой покончено. Следующий шаг, который нужно сделать, это построить каскадную таблицу стилей. Для этого создаем файл с именем menu.css. В этот файл нужно вписать примерно следующий текст:
Здесь мы задаем два класса свойств MainMenu и SubMenu для элемента div. Также для каждого элемента div, свойства которого характеризуются один из этих классов, производится каскадирование элементов a, входящих в блок данного элемента div.
Рассмотрим класс MainMenu. В нем мы задаем позиционирование в абсолютных координатах (начало координат всегда находится в левом верхнем углу, x возрастает слева направо, y сверху вниз), видимость панели главного меню (свойство visibility устанавливаем в состояние hidden (скрытый)), размеры шрифта и сам шрифт (шрифты), толщину (верхняя и нижняя один пиксель, левая и правая — ноль пикселей), цвет (задается в RGB-составляющих) и стиль (сплошная линия) рамки, указатель мыши (в форме стрелки, направленной в верхний левый угол). Для элемента a задается оформление текста (вернее, убирается, так как по умолчанию подлинкованный текст подчеркивается), указатель мыши, левый и правый отступы (задаем так, чтобы имя пункта меню не упиралось друг в друга).
Класс SubMenu задается аналогично. С каскадированием покончили :-).
Теперь нам осталось сделать последний (и, наверное, самый трудный) шаг — написать сценарий. Но не так страшен черт, как его малюют, и вы в этом сейчас сами сможете убедиться. Приступим.
Прежде всего создадим файл с названием menu.js. В него мы запишем вот такой мудреный сценарий:
Перейдем к функциям. Здесь я постараюсь быть как можно более кратким в описании, потому что для детального разбора каждого пункта банально не хватит места в журнале. Итак:
initMenuNumber() — инициализирует переменную menuNumber. Для этого в ней задается счетчик. Функция eval, которая получает объект, сформированный с помощью счетчика, выдает нулевое значение только в том случае, если такой объект не существует. Таким образом мы находим количество пунктов в главной панели меню;
·initItemsNumber() — инициализирует массив itemsNumber. Работает аналогично предыдущей функции. Только здесь мы ищем количество пунктов в каждом подменю.
correctItemsWidth() — корректирует длину пунктов подменю. Это необходимо, так как имена пунктов меню могут иметь различную длину. Эта функция ищет максимальную длину пункта для каждого подменю, а потом устанавливает длину каждого пункта этого подменю в найденное максимальное значение;
initItemsColor() — инициализирует цвет фона и текста пунктов подменю.
init() — инициализирует меню. Очень важная функция. Она вызывается при загрузке страницы. В ней мы вызываем все предыдущие функции, задаем цвет фона и текста для панели главного меню и ее пунктов, задаем длину и левый верхний угол панели, а также делаем панель видимой;
onWindowResize() — обработчик события onresize. Единственное, что делает эта функция, — производит корректирование длины панели меню;
hideAllSubs() — скрывает все подменю;
mClick(number) — обработчик события onClick для главного меню. Если подменю пункта главного меню, для которого сработал обработчик, является видимым, тогда мы скрываем это подменю. Иначе делаем его видимым, предварительно вычислив и задав левый верхний угол отображения подменю;
·activeMenu(number) — активирует пункт главного меню;
diactiveMenu(number) — деактивирует пункт главного меню;
mOverMain(number) — обработчик события onMouseOver для главного меню. Если какое-нибудь подменю видимо, а его номер не совпадает с номером пункта главного меню, вызвавшим данное событие, тогда мы вызываем обработчик события onClick для главного меню (функция mClick(number)), который скроет видимое подменю и сделает видимым подменю, принадлежащее пункту главного меню, вызвавшему событие onMouseOver. Чуть сам не запутался :-). В любом случае, данная функция деактивирует предыдущий активный пункт и активирует тот, для которого сработал обработчик :-).
mOutMain(number) — обработчик события onMouseOut для главного меню. Если номер видимого подменю совпадает с номером пункта главного меню, вызвавшим данный обработчик, просто выходим из функции обработки. Иначе деактивируем пункт, вызвавший обработчик.
mOverItem(number) — обработчик события onMouseOver для пункта подменю. Просто активирует пункт подменю, вызвавший этот обработчик.
mOutItem(number) — обработчик события onMouseOut для пункта подменю. Деактивирует все пункты видимого подменю.
Ну вот, разработка сценария уже позади. В принципе, и само меню уже готово. Осталось только его испытать. А для этого нужно разместить все три файла (menu.htm, menu.css, menu.js) в одну папку и открыть в MS Internet Explorer файл menu.htm.
Введение
Пара слов о работе вебсервераУстановка вебсервера Apache и языка PHP
Настройка виртуального хоста Частые вопросы по установкеДанная статья написана мной по мотивам частых вопросов службе поддержки хостинг-провайдера RunWeb.Ru (к которой я имею непосредственное отношение) по тестированию скриптов и настроек Apache на домашнем компьютере. Первоначально этот материал публиковался на сервере RunWeb.Ru и в рассылке "PHP для начинающих". Постепенно он расширялся по мере поступления вопросов от наших пользователей. Когда же набралось достаточно информации, я собрал ее в отдельную статью и решил, что она может быть полезна не только нашим пользователям хостинга, но и остальным жителям сети.
Поводом для статьи послужило желание создать единое руководство для пользователей, которое помогло бы им тестировать скрипты в домашних условиях, а также использовать возможности настроек Apache для дальнейшего использования на нашем сервере.
Установив вебсервер, как описано в этой статье, Вы получаете полноценный работающий сервер с полным набором возможностей. Что же это такое, почему теперь можно обращаться к адресу "127.0.0.1" и даже не подключаться к Интернету? Я уверен, новички зададутся и этими вопросами и многими другими. Здесь я хочу немножко объяснить принцип работы вебсерверов и более подробно рассказать о структуре сайтов в сети.
Вы наверняка знаете, что когда Вы набираете адрес в строке броузера, то Вы работаете по протоколу http (hypertext transfer protocol - протокол передачи гипертекста). Это понятно хотя бы по строке адреса - она имеет вид вроде http://www.адрес.ru.
Что же такое протокол? Это набор команд, с помощью которых общаются Ваш компьютер (конкретно Ваш броузер) и вебсервер, к которому Вы обратились. Для создания сайтов очень важно понимать этот момент.
А что представляет собой вебсервер? В первую очередь это компьютер, на котором установлено программное обеспечение, дающее возможность передавать информацию Вам при запросе ее Вашим броузером. Это программное обеспечение и есть устанавливаемый нами Apache, который просто умеет работать по протоколу http. Когда Вы запускаете Apache, в Вашей системе появляется кто-то, кому есть что ответить броузеру при запросе им конкретного адреса. То есть получается, что Вы имеете сервер, на котором храниться сайт (или сайты) и ПО, которое умеет эти сайты передавать броузеру. Вот и общаются они между собой на языке (протоколе) http - броузер и Apache. Броузер запрашивает у Apache файлы, а Apache их ему отдает.
Теперь о том, каким образом выглядят сайты на нашем сервере. Все сайты хранятся в упорядоченном виде, каждый в отдельном каталоге. Сайт, который открывается по адресу "http://127.0.0.1" имеет в качестве корневого каталога "F:\project". Каталог может называться как угодно и является корневым каталогом для этого сайта. Имена каталогов и их соответствие http-адресам записываются в файле конфигурации Apache - "httpd.conf", который мы ниже будем настраивать. Чтобы это понять, представьте, что можно создать каталог "F:\site" и записать в файле "httpd.conf" что это самый настоящий сайт и он должен открываться по адресу "http://127.0.0.2". И это будет работать. (Как это сделать мы изучим позже).
Обычно в корневом каталоге сайта есть еще несколько каталогов - для хранения html файлов (это наш каталог www), для хранения файлов статистики обращений к сайту (это каталог logs) и другие, пока нами по небольшой надобности неиспользуемые (например папка cgi-bin для хранения программ, написанных на языке PERL). Так вот, папка которая умеет хранить html-странички, т.е. наша папка www может также содержать и php-программы. То есть все, что положить в эту папку и будет видно по адресу "http://127.0.0.1". Это значит, что если вы создадите файл "F:\project\www\page.html", то вы его увидите по адресу "http://127.0.0.1/page.html". Создав каталог "F:\project\www\katalog", вы сможете посмотреть на него по адресу "http://127.0.0.1/katalog/".
Кроме того, каждый каталог на сервере может иметь т.н. "индексный файл". Это файл, который открывается по умолчанию при вызове каталога, т.е. без явного указания имени файла. В нашем случае это index.html, который находиться в корневом каталоге сервера. Набирая "http://127.0.0.1" мы видим именно этот файл. Соответственно, можем также увидеть его, набрав "http://127.0.0.1/index.html".
Для того, чтобы установить вебсервер на свой компьютер, Вам понадобиться некоторое программное обеспечение. Все ПО, которое мы будем использовать, совершенно бесплатно от рождения и доступно в сети для свободного скачивания. Это, согласитесь, хорошо, особенно, если учесть что бесплатных программ (тем более такого серьезного уровня) для Windows бывает очень немного. Также примечательно, что Вам не придется скачивать пиратские программы и копаться в сети в поиске крэков/серийных номеров и т.п.
Вебсервер Apache
Apache - это программа, которая исполняет функции http-сервера. Именно с ее помощью и будет функционировать вебсервер. Эта программа исполняет все необходимые функции, под ее руководством работает большинство ресурсов сети. Наш не исключение, в силу гибкости и универсальности Apache мы будем использовать именно этот сервер. В дальнейшем Вы увидите, насколько просто использовать эту программу в домашних условиях и насколько широкие возможности она предоставляет. Перед тем, как начать установку сервера, Вам необходимо сразу загрузить Apache. В качестве версии Apache я предлагаю использовать 1.3.12, которая имеет полный набор функции и одновременно не осложнена ненужными на данном этапе усовершенствованиями.
Установка и настройка
Первое: Apache мы будем устанавливать на свободный логический диск (в моем случае это диск G:), но ни в коем случае не в системный раздел. Второе: если, например, путь к интерпретатору Perl в Unix-системах выглядит как /usr/bin/perl, то в Windows он несколько иной - G:\usr\bin\perl.exe.
По умолчанию Apache стремится поселиться в каталоге C:\Program Files\Apache Group\Apache2 и разместить в нем свой "скарб" - несколько программных папок. Но, если помните, мы договорились провести установку на отдельный логический диск. Еще раз повторю, что в моем случае только диск G: любезно согласился принять нового жильца. Для того чтобы каталог нашего виртуального веб-сервера максимально соответствовал структуре реального веб-сервера, создадим папку G:\usr\local и укажем ее в процессе инсталляции. Все, что нужно сделать при установке, - это задать имя создаваемого сервера и почтовый адрес админа.
По окончании инсталляции у нас получится следующий "умолчальный" путь к "Апачу": G:\usr\local\Apache2. В трее появится значок утилиты Monitor Apache Servers, и если все прошло удачно, на этой иконке призывно загорится зеленая стрелка, свидетельствующая о том, что все сервисы "Апача" запущены (Running all Apache services). Чтобы убедиться в благополучном завершении процесса, откройте браузер и зайдите по адресу http://
127.0.0.1, где нас на русском языке еще раз поздравят с установкой веб-сервера. Отложим празднование на некоторое время и постараемся грамотно сконфигурировать Apache. Никто ведь не обещал, что будет легко.
Для первичной настройки сервера перейдем в каталог G:\usr\local\Apache2\conf и откроем в системном "Блокноте" файл httpd.conf. По большому счету, вся настройка Apache сводится к изменению некоторых записей в данном файле, однако будьте очень внимательны при редактировании и меняйте только то, что действительно необходимо!
В разделе Global Environment отыщем строку ServerRoot и откорректируем путь к папкам Apache - в моем случае его следовало привести к виду G:\usr\local\ Apache2. В разделе Main Server Configuration требуется ввести почтовый адрес, который будет демонстрироваться в сообщениях об ошибке сервера. Замените параметр строки ServerAdmin нужным адресом электронной почты.
Значение, указанное в строке ServerName, никоим образом не влияет на корректность работы Apache, так что над данным параметром разрешается глумиться вволю (обзывайте многострадальный сервис как угодно, хоть "Сервак.ру"). Чуть ниже расположилась строка DocumentRoot: нам следует либо указать путь к папке, где будут храниться HTML-страницы будущего сайта, либо создать под эти нужды новую директорию. Я предпочел сделать каталог с именем www в корне упоминавшегося диска G:, после чего редактируемая строка приняла вид DocumentRoot "g:/www" (разумеется, вы можете создать любой другой каталог).
Продолжаем изучать список. Далее идет блок вида <Directory/> Options FollowSymLinks AllowOverride None </Directory>. Нам нужно заменить эту запись другим блоком: <Directory /> Options Indexes Includes AllowOverride All </Directory>. К чему такие ухищрения?
А к тому, что отныне в данном блоке будут храниться "умолчальные" установки для всех директорий. Далее найдем еще один блок, начинающийся со строки <Directory "g:/usr/local/Apache2/htdocs"> и оканчивающийся строкой </Directory>. Значительная часть записей этого блока попросту закомментированы, так что можно смело заменить данный пассаж более коротким:
<Directory "g:/www">
Options Indexes Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>.
Данный шаг нам нужно сделать для того, чтобы определить, в какой папке будут содержаться HTML-файлы (см. выше), и если вы решили хранить веб-страницы в другом каталоге, не забудьте указать путь к нему, внесите соответствующие изменения в данный блок.
Мне почему-то кажется, что у вас доброе сердце и вы разрешите собратьям по локальной сети пользоваться сервером для размещения своих домашних страничек. Если это действительно так, создайте в корне диска G: дополнительный каталог home, где и будут проживать "хомяки" пользователей - совсем как на настоящем веб-сервере. Теперь обратите внимание на строчку UserDir: нам необходимо прописать в ней параметр g:/home (непременно с двойными кавычками). Еще несколько шагов вниз, и перед нами еще одна строка - DirectoryIndex, в ней должны быть перечислены форматы титульных страниц веб-сайта. Пусть это будут index.htm и index.html (DirectoryIndex index.htm index.html).
По моему скромному мнению, установить полноценный веб-сервер и не воспользоваться CGI-скриптами было бы крайне недальновидно. Однако Apache не выходит в астрал, чтобы самостоятельно отслеживать путь к папке cgi-bin, где следует хранить скрипты. Нам понадобится найти строку ScriptAlias /cgi-bin/ и указать реальный каталог, то есть G:/usr/local/ Apache2/cgi-bin/. Не забудьте о двойных кавычках. Для полного счастья осталось отыскать (чуть ниже) и переписать блок, начинающийся с <Directory "g:/cgi-bin"> и заканчивающийся </Directory>: в нашем случае этот участок должен выглядеть следующим образом:
<Directory "G:/usr/local/ Apache2/cgi-bin">
AllowOverride All
Options ExecCGI
</Directory>.
Зачем нужны подобные телодвижения? Вы наверняка замечали, что многие сайты, когда вы запускаете поисковый скрипт или заходите в гостевую книгу, отображают адрес вида http://www.
site.ru/cgi-bin/blablabla. В нашем случае адрес будет выглядеть как http://localhost/cgi-bin/blablabla. А чтобы Apache сообразил, в каком месте жесткого диска лежат CGI-скрипты, мы и указываем ему реальный путь - G:/usr/local/Apache2/cgi-bin.
Чтобы раз и навсегда разобраться с CGI-скриптами, стремительно пролистаем содержимое файла httpd.conf и постараемся отыскать закомментированную строчку AddHandler cgi-script AddHandler cgi-script .cgi. Уберем знаки комментария и дополним ее параметрами .bat, .exe и .pl, для того чтобы Apache рассматривал указанные файловые форматы как CGI-скрипты.
О русских кодировках не стоит беспокоиться, поскольку все необходимые параметры содержатся в конфигурационном файле новой версии Apache (в старых версиях приходилось вносить правку вручную).
И наконец, самое опасное (смайл) - проверка работоспособности нашего веб-сервера. Для начала поместим в каталог, отведенный под хранение HTML-файлов, титульную страничку index.
htm или index.html. Хм, вы не знакомы с основами языка HTML? Не беда: напишите в "Блокноте" вот такой текст:
Я сделал это!
Данный фрагмент сохраните как файл index.html и трепетно перенесите в каталог www (кстати, если установить Apache по умолчанию, то это будет каталог C:\Program Files\Apache Group\Apache2\htdocs). Затаив дыхание, наберите в адресной строке браузера http://localhost/, http://127.0.0.1 или реальный IP-адрес своей машины (например, http://192.168.1.100; кстати, этот же адрес будут использовать ваши соратники по локальной сети). Если на экране появится жизнеутверждающая надпись "Я сделал это!", можно переходить к проверке функционирования CGI-скриптов. Для выполнения этой задачи разработчики Apache советуют написать крошечный BAT-файл с таким содержанием:
@echo off
echo Content-type: text/html
echo
echo
dir.
Разместим созданный "батник" в каталоге cgi-bin и попросим браузер прогуляться по адресу http://localhost/cgi-bin/test.bat (варианты IP-адресов приведены выше). Если мы указали в конфигурационном файле корректные параметры, браузер воспримет нашу писанину адекватно и выдаст примерно такое сообщение: "Volume in drive G has no label. Volume Serial Number is F8E0-C8D6. Directory of G:/usr/
local/ Apache2/cgi-bin 08.05.2005 16:05".
Все! Можно расслабиться любым удобным вам способом и заняться HTML-творчеством, выбором движка для форума, созданием гостевой и прочей рутиной сайтостроительства.
Язык программирования PHP
Именно эта программа даст Вам возможность использовать PHP-скрипты на сайтах, созданных в рамках сервера Apache. В качестве версии я советую PHP 4.3.4, как наиболее перспективную и стабильную версию. Кроме того, эта версия содержит богатые возможности по сравнению с предыдущими. Загрузить ее также с сервера хостинг-провайдера RunWeb.Ru:
Как видите, обе программы достаточно большие. Однако ничего с этим не поделаешь, тем более, что загрузив их один раз Вы сохраните их надолго и сможете пользоваться ими в дальнейшем. Итак, если все загружено, можно переходить к установке.
Для работы сервера и всех наших дальнейших проектов целесообразно выделить отдельный диск на Вашем компьютере. Конечно, Вам не придется покупать новый винчестер, нам вполне хватит возможностей виртуального диска. Что такое виртуальный диск? Это имитация жесткого диска в системе. Если Вы знакомы с возможностями MS-DOS, то уже поняли, что я имею в виду. Виртуальный диск имеет свое, отдельное имя в системе (например, диск F:) и в качестве своего корневого каталога использует обычный каталог на основном диске. Создается виртуальный диск следующей командой MS-DOS:
subst F: C:\server
Где F: - это имя виртуального диска, а C:server - это папка на основном диске, которая и будет корневым каталогом нового диска F. Теперь давайте создадим новый диск. Для этого выполните следующие действия (только для Windows 95-98. Как это делается в других версиях смотрите ниже):
Создайте на диске C: папку "server". Откройте в Windows меню "выполнить", которое находиться кнопке "Пуск" и наберите строчку "subst F: C:\server". При этом должно открыться окно с корневым каталогом Вашего нового диска. Обратите внимание, что как здесь, так и дальше я буду использовать именно диск F: в качестве сервера и папку C:server в качестве корневого каталога этого диска. Я настоятельно советую Вам использовать именно эти параметры, чтобы в дальнейшем при установке не было путаницы. В следующих примерах я буду исходить из того, что у вас все настроено именно так.
Обратите внимание, что виртуальный диск пропадает после перезагрузки и команду subst нужно выполнить заново. Для того, чтобы не вызывать эту команду каждый раз, нужно записать ее в файл autoexec.bat, который находиться в корневом каталоге системного диска. В этом файле содержится список всех программ, которые необходимо выполнить при загрузке системы. Итак, откройте этот файл в "Блокноте" и запишите в самый конец такую строку:
subst F: C:\server
Однако на некоторых операционных системах это может не пойти (например, Windows ME, XP...). Это связано с принадлежностью файла autoexec.bat системе MS-DOS, а в поздних версиях Windows ее попросту нет. В этом случае сделайте следующее. Создайте файл "subst.bat" и запишите в него всего одну, все ту же строку "subst F: C:\server". Теперь поместите этот файл в корневом каталоге и добавьте его ярлык в автозагрузку. Такой подход приведет к исполнению командного файла subst.bat при каждом запуске Windows. Но здесь появится и неприятный момент. При запуске файла должно открываться окно эмуляции MS-DOS, в котором будет выполняться файл. Не очень удобно закрывать это окошко при каждом запуске системы. Так что может быть лучше отдельно при необходимости запускать файл subst.bat.
Все готово? Тогда давайте продолжим установку. Первое, что нам необходимо сделать - это установить вебсервер Apache. Программа, которую Вы загрузили, является установщиком и сама копирует все необходимые файлы. Однако дальше не все так гладко и не достаточно будет просто завершить все шаги установки. Чтобы установить сервер именно так, как нам требуется, давайте действовать следующим образом.
Установка Apache
Запускаем файл установки Apache. После запуска установщика нажимаем кнопку "NEXT" и "YES", пока не дойдет очередь до указания пути установки. По умолчанию записан путь "C:\Program Files\Apache Group\Apache". Это нас абсолютно не устраивает - нужно установить Apache на свежевыделенный диск F. Для этого нажимаем "Browse" и указываем путь "f:\usr\apache" (если такого каталога нет, система спросит нужно ли его создать, на что отвечайте утвердительно). Почему именно "F:\usr\apache"? Дело в том, что каталог "usr" на сервере является служебным, лежащим отдельно от каталогов, где размещаются файлы сайтов и прочие элементы сервера. Каталог "usr" на сервере - это вроде каталога "Windows\System" в Windows. Далее вы еще столкнетесь с этим каталогом при администрировании вашего сервера. Нажимаем "NEXT", выбираем "Typical" - обычная установка. Ждем еще пару раз "NEXT" и сервер наконец устанавливается на наш компьютер, выполняя копирование файлов. Все! Вы только что установили на свой компьютер персональный вебсервер, на котором можете создавать неограниченное количество сайтов с неограниченными возможностями.
Однако с созданием сайтов мы пока подождем. Перед этим нужно еще установить PHP и много чего настроить в параметрах Вашего сервера. Это несложно - мы не будем сегодня углубляться в серьезные настройки Apache (это, кстати, тема для целой книги!), выполним лишь действия, необходимые и достаточные нам для полноценный работы домашнего сервера.
Установка PHP
Продолжим. Теперь нам нужно установить PHP. Вы имеете файл, загруженный с сервера RunWeb.Ru. Это уже не установщик - это обычный ZIP-архив. Создайте в том же каталоге "F:\usr\" папку "php" и разархивируйте его в получившийся каталог "F:\usr\php".
Теперь посмотрите содержимое каталога "F:\usr\php". Вы видите файл php.exe и наряду с ним папки ddl, extensions, java, Mibs и т.п.? Да? Отлично! Поздравляю, PHP готов исполнять Ваши команды. Осталось только познакомить Apache с PHP - они, кстати, образуют отлично работающую пару.
Настройка сервера Apache и PHP
С установкой программ покончено. Теперь перейдем к их настройке. В первую очередь Вам нужно найти файл "php.ini-dist" в каталоге "F:\usr\php" и скопировать его в папку C:\Windows, причем переименовать его на новом месте в файл "php.ini". В итоге у Вас должен получиться файл "C:\Windows\php.ini". Оставим его как есть, ничего в нем не изменяя и перейдем к настройке Apache. Здесь все немного сложнее.
Открываем файл "F:\usr\apache\conf\httpd.conf" в каком-нибудь текстовом редакторе, например "Блокноте". Это очень важный файл, который содержит все настройки Вашего сервера. В нем необходимо задать несколько параметров. Начнем.
1. Найдите в файле httpd.conf строчку "#ServerName new.host.name". Измените ее на строчку "Servername localhost". Обратите внимание, что знак "#" в начале строки убирается.
2. Далее найдите строчку "DocumentRoot "f:/usr/apache/htdocs" и измените ее на "DocumentRoot "f:/project/www". Обратите внимание на _отсутствие_ слеша в конце.
3. Теперь найдите строчку "<Directory "f:/usr/apache/htdocs">" и измените ее на "<Directory "f:/project/www">. Слеш опять отсутствует.
4. Также найдите и измените строку "ErrorLog logs/error.log" на строку "ErrorLog F:/project/logs/error.log" и строку "CustomLog logs/access.log common" на "CustomLog F:/project/logs/access.log common".
5. Теперь перейдите в самый конец файла httpd.conf и впишите в него такие строчки:
ScriptAlias /php/ "f:/usr/php/" AddType application/x-httpd-php .php .phtml .php4 Action application/x-httpd-php "/php/php.exe"
Эти строчки добавляют в настройки Apache возможность выполнения файлов с расширением .php, .phtml или .php4 как программ, написанных на PHP (PHP скриптов).
6. Ну а теперь создайте каталог "F:\project", и в нем два каталога "www" и "logs". В итоге Вы должны получить такое дерево каталогов:
F:\project
F:\project\www
F:\project\logs
Все! Поздравляю, Вы установили и настроили полноценный http-сервер с поддержкой PHP. Теперь дело за малым - научиться включать и выключать сервер, а также немножко его протестировать. Этим мы и займемся далее.
Работа с сервером Apache
При инсталляции сервера программа установки создала в Главном меню (Кнопка "Пуск", далее "Программы") папку "Apache Web Server". В этой папке находиться несколько ярлыков. Нам потребуются следующие из них:
Start Apache - для запуска сервера
Stop Apache - для остановки сервера
При желании Вы можете скопировать их на Рабочий стол, чтобы иметь возможность быстро запускать и выключать сервер.
Двигаемся далее и подходим к самому главному моменту - запуску сервера. Если Вы произвели все указанные действия, то этот этап Вы точно преодолеете без проблем. Но перед запуском я хотел бы предложить Вам сделать еще кое-что, чтобы наверняка протестировать работу вашего сервера.
Итак, создайте в папке "F:projectwww" файл с именем "index.html" следующего содержания:
<html> <head><title>Главная страница сервера</title>< bgcolor=#ffffff> Поздравляю Вас, сервер работает!<br> Протестируйте PHP: <a href="test.php">test.php</a>
Создайте там же файл с именем "test.php" такого содержания:
<? phpinfo(); ?>
Вот и все, наконец-то можно запускать сервер. Торжественно запускаем ярлык Start Apache. При этом открывается черное окошко вроде окна MS-DOS с единственной надписью "Apache/1.3.12 (Win32) running...". Это означает, что сервер успешно запущен и на данный момент работает. Окошко закрывать не нужно, оно является рабочей средой Apache и закрывается с помощью ярлыка "Stop Apache", который и выключает сервер.
Итак, сервер запущен. Что дальше? Открывайте ваш броузер и набирайте в нем адрес "http://127.0.0.1". Помните, подключаться к Интернету в этот момент не нужно! Вы должны увидеть уже набранное приветствие, т.е. код файла "index.html". Перейдите по ссылке, ведущей к файлу "test.php". Что вы видите? Броузер должен вывести довольно большой файл с кучей различных обозначений и гордым заголовком "PHP Version 4.3.4" вместе в логотипом PHP. Это - результат работы нашего маленького скрипта "test.php", а точнее функции phpinfo(), которую мы в нем написали. Эта функция выводит все параметры PHP, установленного в системе.
Если Вам все это показалось сложным и непонятным, не пугайтесь. Дальше будет намного проще, просто в первый раз нужно было все установить и настроить, чтобы работало. Сейчас Вы имеете тот необходимый минимум, которого вполне достаточно, чтобы успешно начать работать с сервером.
Отдельно хочу обратиться к продвинутым пользователям, которые, я уверен, читают (или будут читать) мою статью. В первую очередь - если Вы не удовлетворены количеством информации (и объяснений к ней) по поводу настройки Apache и различных директив PHP - не стоит меня сильно в этом обвинять. Моей целью в этой статье было предоставить новичкам стартовую площадку для их обучения и первого проекта. В будущем я постараюсь продолжить эту тему.
В данный момент на созданном сервере есть всего один хост, с уже известным Вам адресом http://127.0.0.1. Однако если у Вас есть несколько сайтов, то не всегда удобно использовать для их отладки один хост. Для подобных целей подойдет возможность Apache использовать несколько виртуальных хостов.
........
Итак, приступим к созданию виртуального хоста. Как Вы уже знаете, все настройки Apache производятся в файле httpd.conf, который расположен по адресу F:\usr\apache\conf\httpd.conf. В этом файле есть специальный раздел, который обозначен ### Section 3: Virtual Hosts. Он расположен в самом конце файла и отвечает за виртуальные хосты. Далее процесс создания хоста по шагам:
1. Выключите Apache.
2. В самом конце файла httpd.conf допишите такие строчки:
NameVirtualHost 127.0.0.2 <VirtualHost 127.0.0.2> ServerAdmin admin@site2 ServerName 127.0.0.2 DocumentRoot "/site2/htdocs/" ScriptAlias /cgi-bin/ "/site2/cgi-bin/" ErrorLog /site2/error.log CustomLog /site2/access.log common </VirtualHost>
В данной директиве мы описываем новый хост. Строка VirtualHost 127.0.0.2 обозначает адрес нового хоста. ServerAdmin admin@site2 указывает Email администратора, который будет выводиться при ошибках и служебных сообщениях сервера. ServerName 127.0.0.2 обозначает имя хоста, по которому мы будем к нему обращаться из броузера. DocumentRoot "/site2/htdocs/" указывает директорию, где находятся html и php файлы виртуального сервера. ScriptAlias /cgi-bin/ "/site2/cgi-bin/" указывает каталог, в котором расположены cgi-скрипты (программы на perl, c++ и т.д.). ErrorLog и CustomLog указывают расположение лог-файлов сервера. ErrorLog - это журнал ошибок, CustomLog - журнал доступа. В эти файлы будут записываться все ошибки (например, когда запрошенный файл не существует) и все запросы к серверу.
3. Теперь создайте описанные директории F:\site2\htdocs и F:\site2\cgi-bin. Файлы error.log и access.log можно не создавать, они будут сформированы автоматически при запуске Apache. Директория F:\site2 является корневой директорией виртуального сервера. Обратите внимание, что если Вы не создадите или ошибетесь в именах директорий, то Apache откажется запускаться.
4. Теперь можете запускать Apache. Не забудьте перед этим сохранить изменения в файле httpd.conf.
Вот и все, новый хост создан. Можете разместить в него файлы и просматривать их через броузер по адресу http://127.0.0.2.
Файл .htaccess - это служебный файл вебсервера, с помощью которого можно производить определенные настройки своего сайта. Например, с помощью этого файла можно настроить свои страницы ошибок или обработку SSI-директив.
Файл .htaccess может быть размещен в любом каталоге сервера. Кроме того, он действует на все внутренние каталоги, размещенные в текущей директории. То есть, если у Вас есть каталог "www" и в нем два каталога "1" и "2", то размещая файл .htaccess в "www", Вы одновременно распространяете его действие на каталоги "1" и "2".
Обратите внимание, что имя этого файла начинается с точки. Файлы, имена которых начинаются с точки, в системе Unix являются скрытыми. Это означает, что если Вы загрузите этот файл на сервер провайдера, то Вы не будете видеть его в Вашем FTP-клиенте. Это, кстати, частый вопрос, с которым мы сталкиваемся в службе поддержки RunWeb.Ru. А что делать, если Вы хотите изменить этот файл? Самый простой вариант - изменить его на домашнем компьютере и заново загрузить на сервер по FTP. Ваш клиент не должен спросить перезаписывать ли его, так как он не видит .htaccess в списке файлов. Это нормально, можете быть уверены, файл перепишется.
В качестве примера использования .htaccess давайте рассмотрим установку своих страниц ошибок. Что такое "свои страницы ошибок"? Допустим, у сервера запрашивается документ, которого не существует. В этом случае возникает ошибка номер 404, "Файл не найден". Apache при этом отправляет броузеру свою служебную страницу этой ошибки (404 Not Found). То же самое и с ошибкой номер 500 "Внутренняя ошибка сервера". Она возникает при возникновении ошибки на сервере, например, при исполнении CGI-скрипта. Итак, как установить свои страницы ошибок?
Для этого создайте пустой файл .htaccess в корневом каталоге виртуального хоста (например, F:server) и запишите в него следующие строки:
ErrorDocument 404 http://127.0.0.1/err404.html
ErrorDocument 500 http://127.0.0.1/err500.html
Они назначают каждой ошибке свою страницу, которая будет открываться при возникновении данной ситуации. Естественно, Вам нужно будет создать файлы err404.html и err500.html на сервере. Называться они могут как угодно, не обязательно как в этом примере.
Существует также много других возможностей настроек файла .htaccess. Несколько очень полезных возможностей (таких как установка индексного файла, паролирование директорий, настройки SSI и другие) описано на нашем сервере RunWeb.Ru в разделе Частые вопросы по настройкам сервера. Список часто пополняется, поэтому рекомендую Вам ознакомиться с описанными в нем возможностями.
1. Отсутствуют ярлыки запуска и/или выключения сервера.
Странно, конечно, но и такое, оказывается бывает. В этом случае нужно создать ярлыки для запуска и остановки сервера вручную. Они должны иметь вид:
Запуск сервера: F:\usr\apache\Apache.exe Остановка сервера: F:\usr\apache\Apache.exe -k shutdown
2. Отсутствует файл F:\usr\apache\conf\httpd.conf
Это случается и имеет отношение, равно как и предыдущий пункт, к различным дистрибутивам Apache. (по этому советую загружать дистрибутив, приведенный здесь!). Итак, файл "httpd.conf" отсутсвует, но есть файл "httpd.conf.default". В этом случае нужно скопировать файл "httpd.conf.default" в "httpd.conf" (именно создать копию этого файла с другим именем, а не переименовывать сам файл. "httpd.conf.default" всегда желательно иметь, так как он является дистрибутивом установок Apache и с его помощью Вы всегда можете вернуться к первоначальным настройкам). Ну а дальше производить все настройки в получившемся файле.
3. Не работает PHP (в броузер выводиться код) или не работает Apache (окошко сразу закрывается).
Проверьте правильность установки и настройки сервера (см. выше). Все пути, настройки, тексты скриптов обязательно должны совпадать с примерами - буква в букву. Иначе проблемы скорее всего будут. Например, Вы поставили слеш в настройках в другую сторону (вместо "/" написали "\" или наоборот) или в тексте скрипта вместо "<?" написали "< ?" (с пробелом) и т.п. Такие ошибки мне вычислять, к сожалению, очень сложно... мне как минимум нужно сесть за Ваш компьютер :)
4. Окно MS-DOS при запуске Apache открывается и сразу же гаснет. Не успеваю даже прочитать, что там написано.
Это означает, что Apache неправильно установлен или настроен. Не стоит сразу же повторять установку (запускать setup) - файлы сервера скопированы верно, ведь ярлык открывает файл Apache.exe. В этом случае обычно неверны настройки сервера. Проверьте файл "httpd.conf" в каталоге "F:\usr\apache\conf\". Особенно внимательно посмотрите на пути (F:\project и т.п.). Не забывайте про слеши! Они должны быть именно такие (в ту сторону), как приведены в примере (см. архив). И, очень важно: там, где их нет (например, в конце путей) не нужно их ставить! В завершение проверьте, что на сервере верна структура каталогов.
Для начала разберемся, что это собственно такое.
Doorways (входная страница) или дорвей - это страница, созданная для достижения высокого положения в результатах поиска в определенной поисковой системе по определенному ключевому слову. Посетители, попадая на такую страницу, переходят на основной сайт либо по ссылке, либо автоматически, редиректом. Вы посещали такие страницы, но вряд ли всегда об этом догадывались. Хороший дорвей выглядит как часть сайта и зачастую содержит некоторую информацию. Вообще говоря, поисковые системы не любят дорвеи. Такое мнение возникло после сплошного использования дорвеев спаммерами, когда существовало очень много страниц, практически не имеющих содержания, задача которых заключалась в соответствии требованиям определенного поисковика относительно количества текста на странице, количества ключевых слов и т.д. Принято считать дорвеи спамом, однако если использовать их правильно и аккуратно, они могут привлечь очень много людей на сайт. Любимый пример одного из моих знакомых из Америки на эту тему - представьте себе сайт компании, занимающейся онлайновой торговлей. В ассортименте такого магазина имеется 1000 товаров. Попросту невозможно оптимизировать одну страницу, или создать один дорвей, чтобы охватить все продаваемые товары. Тем более, сделать это во всех поисковых системах. Однако, сделав страницу, с которой продается какой-либо один товар или их группа, и оптимизировав ее для конкретного поисковика, мы получим дорвей сайта по одному или нескольким ключевым словам, соответствующим данному товару.
Дорвей является обычной страницей, поэтому содержит все необходимые тэги. Единственное отличие его состоит в том, что все тэги, учитываемые поисковыми машинами, максимально оптимизированы для определенного поискового слова. Не стоит использовать на дорвее графику, ява-скрипты или сложные построения из таблиц. Помните, ваша задача - создать небольшую страницу, которую бы хорошо прочел робот поисковой системы, а не поразить дизайном серфера. Правда, большинство дорвеев настолько ужасно выглядят, что сложно представить себе серфера, кликнувшего по ссылке. Не повторяйте этой ошибки. Пусть дизайн страницы будет простым, но профессионально выглядящим.
Разница между дорвеями и спамом Каждая поисковая машина имеет свои критерии для определения этого, но некоторые общие правила все же есть.
Не используйте тэг META-Refresh. Из-за частого использования этого тэга на порносайтах, большинство поисковиков, встречая его на странице, считают страницу спамом. Если вам необходимо использовать редирект, поставьте ява-скрипт или cgi-скрипт для этого и максимально увеличьте время срабатывания. Оптимально - 10 сек.
Ваши дорвеи будут признаны спамом, если они практически одинаковы по содержанию для каждого ключевого слова.
Если ваш дорвей оптимизирован для слова, не имеющего отношения к теме основного сайта, он будет признан спамом. Кстати, аналогично, если вы делаете дорвей для какого-то определенного раздела сайта, а ссылка с него ведет на главную страницу, это тоже могут счесть за спам.
Никогда не сабмитьте дорвей (даже очень хороший) в каталоги. Каталоги включают только одну страницу сайта и попытка добиться включения дорвея в каталог будет считаться спамом.
Не используйте для разработки дорвеев какое-либо специальное программное обеспечение типа WebPosition Gold или AutoWeb. Ввиду массовости их использования поисковики научились их вычислять. Кроме того, попробуйте создать дорвей в WPG и проанализировать его WPG Page Critic. Вы увидите, что практически не выдержан ни один параметр, необходимый для успешного позиционирования страницы. Не легче ли сделать руками?
И напоследок о гейтвеях.
Gateways (ворота) - страницы, которые содержат ссылки на ваши страницы. Они не должны содержать каких-либо тэгов, ключевых слов и вообще текста. Вся их задача - заставить робота поисковой машины пойти по ссылкам с них на ваши основные страницы. Суть метода в том, что зачастую поисковики считают документ более "ценным", если он был найден по ссылке, а не послан в поисковик человеком вручную. Конечно, для использования гейтвеев необходимо запастись терпением. Может пройти не один месяц, пока робот обойдет все ссылки. Но результат стоит того. Желательно при этом, чтобы такие страницы располагались на другом домене. Это повышает ценность ссылок и, в принципе, может привести и к увеличению link popularity.
Индексирующие поисковые системы - сегодня основные поставщики новых посетителей на сайт. В то же время алгоритмы работы поисковиков никогда не публикуются, на что у разработчиков есть все основания - борьба с замусориванием поисковиков (поисковым спамом или спамдексингом) отнимает много сил и средств у коллектива любого поискового проекта.
Вопрос о том, как попасть на первую страницу результатов поиска по профильным, то есть точно относящимся к тематике сайта, запросам, волнует многих. Явный дефицит популярной информации на эту тему породил большое количество домыслов - о "чудодейственных" методах, о "коррумпированности" и "протекционизме" администраций поисковых систем, "продающих" и раздающих выгодные места своим людям.
Опыт анализа сайтов, владельцы которых испытывают проблемы с посещаемостью из поисковых систем, показывает, что причины, как правило, гораздо проще. Они заключаются в элементарной неинформированности разработчиков и владельцев сайта о самых простых правилах, которые необходимо учитывать, чтобы сайт был хорошо представлен в поисковых системах.
Поисковые запросы и релевантность
Разумеется, для того, чтобы на сайт из поисковой машины пришли посетители, ему недостаточно просто присутствовать в результатах поиска. Необходимо попасть в начало списка результатов поиска.
Критерии, от которых зависит положение ссылки на сайт на страницах результатов поиска, можно разделить на две группы - текстовые и нетекстовые. Из названий ясно, что текстовые критерии - это характеристики текстового содержимого страницы. Нетекстовые критерии оценивают связи страницы, а ее текст при этом роли не играет.
Учет текстовых критериев осуществляется на этапе создания сайта и текста. Работа с нетекстовыми параметрами возможна уже после того, как сайт выложен в Сеть и подан на индексацию.
В работе с индексирующими поисковыми системами всегда следует помнить, что командой на поиск в поисковике является поисковый запрос, введенный пользователем - слово, несколько слов, словосочетание, фраза.
Здесь возникает довольно существенный смысловой (семантический) разрыв. За то, что происходит в голове пользователя, поисковик не отвечает, а для пользователя не существуют понятия "правильного" и "неправильного" запросов.
Поэтому всегда перед тем, как планировать сайт, стоит ознакомиться с тем, как часто и в какой форме пользователи на самом деле запрашивают информацию, предполагаемую к размещению в Интернете.
В Рунете единственным источником достоверных данных о поисковых запросах является сервисная служба системы рекламных объявлений "Яндекс-Директ".
Текстовые критерии релевантности
Сегодня можно полностью забыть такое устаревшее понятие, как "ключевые слова". Первоначально ключевыми назывались слова, внесенные в особое поле страницы, помеченное тегом <meta name="keywords" ...>. Но сегодня поисковые системы игнорируют содержание этого поля. Чтобы избежать разночтений, мы вообще откажемся от использования этого термина.
Результаты поиска определяются прежде всего поисковым запросом; поэтому, когда речь далее пойдет о ключевых словах и "соответствии-несоответствии" текста страницы запросу или отдельным словам, всегда будут иметься в виду слова, из которых состоит поисковый запрос.
1. Титульная фраза
Титульная фраза (титул) - это текст, который содержится на странице в дескрипторе title, в коде страницы он оформляется как <title>Титульная фраза</title>. Слова титульной фразы имеют очень большое значение при упорядочивании (ранжировании) результатов поиска в поисковой системе. А именно, если формулировка запроса совпадает с титульной фразой, либо титульная фраза содержит несколько слов запроса, то страница с таким титулом при прочих равных условиях окажется выше.
Стоит отметить противоречивый статус титульной фразы, ставший причиной наиболее грубых ошибок многих вебмастеров.
Титульная фраза не отображается на странице сайта в браузере. Точнее, отображается, но на рамке окна браузера, то есть в месте, куда обычно никто не смотрит. Именно поэтому настолько распространена ошибка, когда вебмастер ставит для всех страниц сайта одинаковый титул. Обычно это бывает самоназвание сайта, что весьма корректно выглядит, когда сайт, например, показывается заказчику.
Но когда сайт подается на индексацию в поисковые системы, картина меняется, так как в результатах поисковых систем содержание тега <title> отображается в самом интересном месте - как заголовок найденной страницы! Именно титульная фраза страницы является наиболее ярким элементом списка результатов поиска по поисковому запросу. Здесь она играет свою главную роль - заголовка, "лица" страницы. И выбор пользователя более чем наполовину определяется точностью, понятностью и привлекательностью титула.
Таким образом, можно вывести первые правила подготовки сайта к индексации поисковыми машинами:
Все страницы сайта должны иметь разные титулы.
Титульная фраза каждой страницы должна быть точной и ясной.
Содержание страницы должно соответствовать титулу.
В титульной фразе страницы должны быть слова, часто встречающиеся в поисковых запросах пользователей, ответом на которые может являться данная страница.
Не стоит использовать титульные фразы длиной свыше 80 символов.
2. Описание страницы
Описание страницы - это содержание поля, помеченного тегом meta description, оформляется как <meta name="description" content="Описание страницы, максимальная длина - 200 символов">. Слова описания обычно не влияют на ранжирование результатов поиска, и среди русских поисковых систем данный тег используется на практике лишь "Яндексом". Однако "Яндекс" сейчас - ведущая система, и грамотно составлять описание даже в расчете только на "Яндекс" вполне целесообразно.
Текст описания показывается в результатах поиска "Яндекса" под текстом титульной фразы. Таким образом, правильно оформив титул и описание, можно достичь максимальной привлекательности ссылки на вашу страницу в "Яндексе". Это срабатывает, когда пользователь, получив ответ, выбирает из нескольких альтернатив.
К сожалению, большинство вебмастеров пренебрегают такой возможностью улучшить внешний вид (понятность) своих ссылок в поисковике, ставя в описание всех страниц сайта одну и ту же фразу, либо вообще игнорируя это поле.
Но в идеале нужно... Сформулируем очередные правила:
Описания всех страниц сайта в теге <meta name="description" ...> должны быть разными.
Описание каждой страницы должно соответствовать ее содержанию.
3. Прочие текстовые критерии
Поисковые машины используют также следующие текстовые критерии релевантности найденных страниц запросу:
позиция найденных слов в титульной фразе;
"вес" найденного слова и близость его к началу документа;
наличие найденных слов в заголовках (<h1>, <h2> и т. д.) и фрагментах, выделенных жирным шрифтом (<b>, <strong>);
близость найденных слов друг к другу (компактность цитаты).
Объясним, что подразумевается под "найдеными словами". Индексирующие поисковые системы основаны на идее поиска "цитаты". Подразумевается, что пользователь хочет увидеть документ, в котором есть слова, введенные им в виде запроса. Поисковик находит в своем индексе такие документы и выдает их адреса. В вышеперечисленных критериях "найденное слово" - это слово, имеющееся как на веб-странице, так и в поисковом запросе, по которому должна быть показана ссылка на данную веб-страницу.
С ростом количества документов в Сети все острее становилась проблема ранжирования ссылок, выдаваемых поисковиками в ответ на запросы пользователей. Их стало слишком много. Поэтому разработчики стали один за другим вводить критерии, позволяющие как бы "уточнить" релевантность страницы - степень соответствия документа запросу.
Если в документе речь идет о каком-то предмете, по идее, этот предмет должен часто упоминаться (называться), т.е. частота слова - названия предмета будет повышенной. Этот параметр называется "весом" слова.
Авторы текстов знают, что главную идею материала лучше всего выносить в начало текста, поэтому некоторые поисковые системы положение найденного слова по отношению к началу документа стали также принимать за критерий релевантности.
Положение слов относительно друг друга, особенно в титуле, тоже является критерием. В случае поисковых запросов, состоящих более чем из одного слова, справедливо предположение (вспомним основную идею индексирующих поисковиков), что пользователь ищет цитату, то есть именно вхождение введенного словосочетания. Возможно, в запросе и пропущены некоторые слова, но в любом случае порядок слов и близость их друг к другу важны. Например, в запросе стропила плотники легко узнается название повести Сэлинджера "Выше стропила, плотники!", а плотники стропила напоминают уже о Бродском ("поднять не звали плотников стропила"). Подобная компактность цитаты хорошо распознается поисковыми системами.
Почему в качестве критерия релевантности используется наличие слов запроса в выделенных фрагментах и заголовках документа, очевидно: именно таким образом создатели текстов выделяют наиболее значимые слова, на которые хотят обратить внимание.
Как видим, все текстовые критерии ранжирования результатов в поисковых системах имеют простые логические объяснения. Разработчики поисковых систем ранжируют страницы, исходя из предположения, что Web-мастера создавали и структурировали их в расчете на "живых" посетителей.
Распределение частот поисковых запросов. Вебмастера и поисковые системы. Спамдексинг
Поисковые запросы повторяются. Разные люди, в разных городах, в разное время и в разные поисковики вводят одни и те же поисковые запросы: работа, чат, секс, mp3, windows, линукс и др. Частоту использования каждого запроса можно подсчитать. Некоторые встречаются в среднем раз в неделю, а есть и такие, что ежедневно повторяются сотни раз. Чем длиннее запрос, тем реже он встречается. И наоборот, наиболее частотным запросом из группы, относящейся к какой-либо теме, всегда является наиболее общий запрос - одно слово или словосочетание, определяющее тему.
Поисковые системы сегодня стали основным поставщиком новых пользователей на любой интернет-ресурс, и web-мастера это прекрасно знают. Знают и закономерности спроса. web-мастер, поддерживающий сайт по трудоустройству, например, в Санкт-Петербурге, безусловно осведомлен, что запрос работа встречается гораздо чаще, чем работа в Питере. Но нечеткий однословный запрос работа используют не только питерцы, но и москвичи, новосибирцы, казанцы... Поэтому вебмастерам сайтов по трудоустройству каждого из этих городов хочется попасть на первую страницу поиска именно по "главному" однословному запросу. Но городов много, а на первой странице результатов может разместиться всего лишь 15-20 ссылок.
С целью улучшить свою позицию в результатах поиска вебмастера применяли и применяют ряд технических приемов, предназначенных именно для обмана, "накручивания" поискового робота. Явление это называется спамом поисковых систем или спамдексингом (от spam + indexing) и появилось практически одновременно с появлением поисковиков.
Так как последние раньше использовали только текстовые критерии для ранжирования результатов, то типовым приемом спамдексинга стала так называемая "накачка" - искусственное завышение частот (весов) нужных слов на странице.
Варианты "накачивания" использовались самые различные: от примитивного "скрытого", невидимого обычному пользователю текста, до создания специальных текстов, где веса слов тщательно рассчитывались в соответствии со значениями, снимаемыми со страниц, занимающих первые позиции в ссылках по необходимым запросам.
Накачиваются сами страницы, титульные фразы, теги noframes и keywords. Специально создаются страницы с подобными "оптимизированными для поисковиков" текстами, попадая на которые, пользователь автоматически перебрасывается на другой сайт. Либо просто видит крупную надпись "Вход". Они так и называются - входные страницы. Более того, разработана специальная техника (клоакинг), когда поисковому роботу показывается одна страница, а пользователям - совершенно другая.
Подобные действия являются бичом поисковиков, потому что сильно перегружают индексы, уродуют внешний вид страниц с результатами поиска и резко снижают релевантность системы, то есть ее качество и ее конкурентное преимущество в борьбе за популярность с другими поисковиками.
История поисковиков есть история их постоянной борьбы со спамом. Совсем недавно в поисках оружия против текстовой "накачки" поисковики начали дополнять текстовые алгоритмы ранжирования результатов поиска нетекстовыми критериями - а именно, ссылочными.
Нетекстовые критерии релевантности
Нетекстовые критерии можно разделить на три основных типа. Мы даем условные названия, так как устоявшейся терминологии пока нет:
ссылочно-расчетные,
ссылочно-текстовые,
каталожные.
Как мы уже говорили, в случаях нетекстового критерия на ранжирование страницы влияет не ее содержание, а другие факторы.
Ссылочно-расчетные критерии. К ссылочно-расчетным критериям относится алгоритм поисковой системы Google - так называемый взвешенный индекс цитирования PageRank (PR). Подробная статья о нем Криса Райдингса (перевод и комментарии А. Садовского) имеется на сайте Александра Садовского http:// www.digits.ru/. (Так же по этому вопросу вы можете ознакомиться со статьей Александра Ихильчика и Сергея Безпалого, размещенной на нашем сайте - примечание РтР)
Индекс цитирования учитывает, как много ссылок имеется в Сети на ваш сайт, и насколько авторитетны ссылающиеся на вас сайты. Авторитетность "цитирования" определяется также по количеству ссылок на "цитирующего". Для расчета индекса цитирования Google и подобные ему системы регулярно "перетряхивают" невообразимо огромные матрицы связей между сайтами Интернета, пересчитывая вес ссылок и авторитетность ресурсов (заметим, что Google использует для этого "ферму" более чем из 10 000 серверов!). Подобный алгоритм используется также "Яндексом".
Каталожные критерии. К каталожным критериям можно отнести индекс цитирования "Яндекса" (citation index, CY) и алгоритм выдачи результатов поиска "Рамблера". В обоих случаях принцип один - наверху результатов поиска по запросу в индексах выдается несколько ссылок на сайты, зарегистрированные в принадлежащих порталам тематических каталогах. В случае "Яндекса" показывается до трех ссылок на сайты из каталога "Яндекса", если в их описании имеются слова запроса. Ранжирование производится по убыванию индекса цитирования "Яндекса". Каталожные ссылки в результатах поиска "Яндекса" четко отличаются от обычных счетных: они не нумеруются, а отмечаются точками. Описание ресурса в каталоге "Яндекса" проверяется, а частенько и составляется вручную составителями каталога (так называемыми модераторами). Индекс цитирования, естественно, рассчитывается автоматически.
В свою очередь, "Рамблер" "замешивает" на первую страницу результатов поиска по запросу до пяти ссылок на сайты, зарегистрированные в каталоге-рейтинге Rambler's Top100, если их посещаемость (по "хостам") выше некоторого минимального порога. Критерием для внесения данных ссылок в список результатов поиска служит наличие слов запроса в описании сайта, сделанном для Rambler's Top100. В отличие от "Яндекса", где размер описания ограничен двумя сотнями символов, на индексацию в Rambler's Top100 может быть подано описание размером до 4000 символов.
При внесении в рейтинг описание сайта также может проверяться сотрудником "Рамблера" - модератором рейтинга.
Ссылочно-текстовые критерии. К ссылочно-текстовым критериям может быть отнесен алгоритм, не так давно появившийся в "Яндексе". В данном случае "Яндекс" индексирует текст ссылки (то есть текст, выделенный как гиперссылка, на странице сайта). Другими словами, индексируется содержимое тега <a href=...>, и если запрос совпадает с этим содержимым, в результатах поиска выдается адрес, указанный в теге.
"Яндекс", очевидно, запоминает только внешние ссылки с сайтов, то есть страница, на которой указывает ссылка, не должна принадлежать сайту, где эта ссылка размещена.
При этом при показе результатов поиска подобная страница не имеет титула, и "Яндекс" сопровождает ссылку на нее явным указанием - "адрес найден по ссылке".
Спрос и предложение - точки сближения в поисковых системах
Поисковые запросы являются реальным выражением спроса пользователей на информацию в Интернете. Предложение информации осуществляется на страницах ресурсов Интернета. Индексирующие поисковые системы сегодня являются бесспорным лидером трафикогенерации для большинства сайтов и являются наиболее естественным связующим звеном, соединяющим спрос и предложение.
Как мы уже показали, в основе всех текстовых критериев поисковых систем лежит представление, что пользователь ищет цитату из какого-то документа. На самом же деле это не так. Пользователи ищут не цитаты из документов, а решение своих проблем - ответы на свои вопросы, которые они даже не всегда могут точно сформулировать. Обсуждение этого вопроса выходит за рамки предмета данной статьи, приведем лишь одно из доказательств.
Вот оно: язык спроса радикально отличается от языка предложения. Характеристиками языка предложения (текстов сайта) в массе являются грамотность, литературная корректность, четкость изложения мыслей. Этого совершенно нельзя сказать о языке спроса (языке запросов) - основная масса поисковых запросов относится к нечетким, т. е. допускающим более одного варианта понимания; запросы часто слишком лаконичны, полны опечаток, смешивают кириллицу и латиницу и т.п.
Поисковикам неоткуда брать информацию для своих индексов, кроме как со страниц, подготовленных вебмастерами. И они берут ее в рафинированном, литературном виде.
С другой стороны, вебмастерам никогда не удастся обучить пользователей формулировать поисковые запросы "как надо", длинными гладкими фразами на хорошем русском языке.
Поэтому первым шагом даже не подготовки сайта к индексации, а его разработки должно быть изучение того, как пользователи ищут в Сети информацию. Ту информацию, которую владелец сайта собирается предлагать на своем ресурсе.
Технически этот анализ осуществляется с помощью получения реальных формулировок запросов и информации об их частотах, выделении устойчивых направлений спроса, базовых формулировок и типовых конструкций поисковых запросов.
Далее разработчикам предстоит решить, как же соединить требования, предъявляемые к печатному тексту, с необходимостью включения в них слов и конструкций, информация о которых была получена путем анализа поисковых запросов. Процесс этот, увы, алгоритмизировать невозможно. Здесь разработчикам сайта придется решить не очень сложную, но важную лингвистическую задачу - попытаться описать свой бизнес не словами генерального директора, вебмастера или отдела маркетинга компании, а словами публики.
С чего начать
Наверное, эту статью логичнее было бы начать с конца. Сначала - изучение спроса, потом создание текстов, потом - оформление текстов с учетом текстовых критериев ранжирования, потом оформление описаний страниц для большей привлекательности ссылок на них в поисковых системах, и лишь потом - старт проекта и начало работ по использованию нетекстовых критериев (расстановке ссылок и пр.).
Действительно, это - самый правильный путь. Но на следование им не всегда хватает времени, ресурсов и терпения.
Однако мы еще раз повторим, что основная масса ошибок вебмастеров, снижающих видимость сайта в поисковых системах, касается не "коренных" задач планирования, и не неосведомленности в тонкостях построения "иерархических", "циклических" и "обширных" систем связывания страниц для оптимизации PageRank. И дело не в неспособности писать хитрые "входные страницы", чтобы не быть "забанеными" модераторами или фильтрами поисковых машин.
Основная ошибка банальна - это неумение работать с титульными фразами и описаниями. Исправив грубые ошибки в титулах и описаниях, можно, во-первых, значительно расширить круг поисковых запросов, по которым ссылки на страницы сайта будут показаны на лучших позициях. И, во-вторых, придать своим ссылкам в поисковиках достойный, привлекательный внешний вид, вызывающий желание щелкнуть по ним.
Начинать нужно именно с этого.
Если Вы не хотите видеть в логах Вашего сайта строчки о том, что не найден файл favicon.ico - нарисуйте фавиконку к своему сайту. Достаточно удачную программку для конвертирования BMP в ICO можно найти здесь. Для того, чтобы фавиконка правильно воспринималась, настоятельно рекомендуется наличие в заглавной странице вашего сайта в секции HEADER строки:
<LINK REL="SHORTCUT ICON" href="http:///favicon.ico">
What is a favicon?
A Favicon is a multi-resolution image included on nearly all professional developed sites. The Favicon allows the webmaster to further promote their site, and to create a more customized appearance within a visitor?s browser. Often, the Favicon reflects the look and feel of the web site or the organization?s logo.
What is Favicon.com?
Favicon.com helps webmasters develop Favicons for their own sites, by providing a professional icon design service and by providing software for visitors who wish to build their own.
Where and when will our Favicon be seen?
The Favicon was first popularized by its appearance in the ?Address Bar? and ?Favorites Folder? using Internet Explorer and is now a prominent fixture of web browsers such as Mozilla and the soon-to-be-released Netscape 7.0. Each web browser has a unique user interface, and as a result uses the Favicon in different ways. For additional detail, please look at our documentation on specific web browsers such as KONQUEROR, INTERNET EXPLORER, GALEON, and MOZILLA/NETSCAPE.
What is the quickest way to get a Favicon?
Let us do the work for you! Working from the look and feel of your web site, or any images you wish to provide, we will create a fabulous Favicon compliant with multiple browsers. After your order, you will be prompted to upload any images and/or comment on your preferences.
How do I have my Favicon professionally made?
Favicon.com is proud to offer professional Favicon design services to our visitors. For $75 we create a custom favicon based on the look and feel of your web site, or any image you would like us to work with. This price includes delivery of two distinct favicons, both including 256 color, 32x32 and 16x16 pixel designs. After you order, you will be immediately prompted to upload any images and to give us any guidelines for creating your icon. Typical delivery time is three-four business days. Upon delivery, you can request one set of revisions at no additional charge.
What if I wish to make my Favicon on my own?
If you wish to create your own Favicon, we offer the following options:
F.Y.I.: Favicon (pronounced fav-eye-con) is short for 'Favorites Icon'
**** VOICE YOUR SUPPORT FOR FAVICONS TODAY! *****
I'm seeing favicon.ico requests in my web site's error_log. What does this mean?
In short terms, it means people are coming to your site using IE 5.0 and bookmarking it. Since you have not created the favicon.ico image the web browser is looking for, the web server reports this in its error_log. If you want a quick fix, you can order one from us that will utilize your look and feel. If you have a lot of time on your hands, continue reading our faqs and you should be able to create a favicon yourself.
What are the security/privacy concerns related to favicon.ico files?
Originally, there was concern about Internet Explorer's Favicon implementation which sent a loggable request for the favicon.ico file when you bookmark a page. This would have allowed sites to build profiles of visitors' interests. We believe, however, that most of the privacy concerns surrounding favicons has been overcome in the newer implementations. Browsers like Mozilla, Netscape, & Konqueror look for this file regardless of whether the user bookmarks a page. In Internet Explorer, the implementation of favicons is a little more vague. We are not sure of why they appear sometimes and sometimes they don't. Though there are different implementations, it is now a must for all web sites that care about their appearance to have favicons.
I'm using a Web Site Hosting Service that does not support ICO files. What should I do?
Contact the company that hosts your web site and let them know that you want them to add support for ICO files. You may want to direct them to Favicon.com as well since this is the first time ico files are being used on the Internet. Most ISPs now support favicons.
What is an ico file?
An ico file is actually a repository of bitmap like images. They are used because in some locations a 16x16 pixel image is desired, and sometimes a 32x32 image may be needed. Sometimes a 16 color image is desired, and sometimes a 256 color icon is desired. This repository is scanned for the image size/color count appropriate for the location and the computer's color capability. If the image is not ideal, it may be compressed, expanded, and/or colors may be modified producing unexpected results.
Isn't an ICO file just a renamed BMP?
NO. Although some people have said an ico is a BMP, this is not true. Think of an ICO file as a repository of BMP images. It has its own format. If you have a 16x16 bmp you want to convert, use a program designed for the creation of favicons, or hire us to do it for you!
I am having trouble getting favicons to work with https (secure http). Is there anything we can do?
Yes, they do work under https. Just hardcode the icon location like below.
<LINK REL="SHORTCUT ICON" HREF="https://www.mydomain.com/myicon.ico">
Note: Don't forget to change the path to your favicon.
I have some suggestions/updates for your site. What should I do?
If you have information or experiences that would be helpful to other visitors, please write to [email protected].
What if my ISP does not support favicons?
It is very simple, just put a copy in a different location and use the following tag:
<LINK REL="SHORTCUT ICON" HREF="">
make sure to replace somedomain.com and somename.ico with the appropriate file. In addition, we will host your favicon for $10/year (up to 100,000 requests) and $25/year for unlimited requests. Click here for more information.
Права доступа | Команда(код) | Описание |
U |
G |
W |
||
r w x | r - x | r - x | [site] chmod 755 | Для директорий, CGI скриптов и других исполняемых файлов |
r w - | r - - | r - - | [site] chmod 644 | Для обычных файлов |
r w - | - - - | - - - | [site] chmod 600 | Скрыть файлы от всех кроме вас и ваших скриптов |
U = user; G = group; W = world r = Read; w = Write; x = Execute; - = Нет права |
А теперь перейдем непосредственно к описанию правил. Преобразования описываются при помощи директивы RewriteRule. Правил может быть несколько, при этом все они применяются в порядке их описания. Когда правила заканчиваются, они вновь начинают применяться с самого начала, и этот цикл продолжается до тех пор, пока "срабатывает" хотя бы одно из правил. В некоторых случаях это может приводить к зацикливанию, поэтому при описании правил нужно быть предельно внимательным. Существует несколько специальных флагов, которые предоставляют возможность прервать этот процесс на определенном правиле или пропустить несколько правил (об этом будет рассказано ниже). Синтаксис директивы RewriteRule выглядит следующим образом:
RewriteRule "исходный путь" "замена" "флаги"
Директива RewriteEngine включает или выключает преобразование http-ссылок
Исходный путь - это часть исходной ссылки, от которой отрезаны имя сервера, путь до текущего каталога и параметры запроса. Допустим, что ваш веб-сайт www.site.com расположен в каталоге /home/site/www. Тогда для ссылки http://www.site.com/test/list.html?mode=0 исходным путем в каталоге /home/site/www будет test/list.html, а в каталоге /home/site/www/test - list.html. Исходный путь задается регулярным выражением (синтаксис регулярных выражений Apache подробно описан в статье "Маленькие настройки большого веб-сервера"). Символ ! перед исходным путем означает, что правило "срабатывает" по несовпадению ссылки с заданным регулярным выражением.
Замена - это то, на что будет заменена исходная ссылка в случае "срабатывания" правила. Замена может быть относительной (если она не начинается с символа /) и абсолютной (если она начинается с символа / или представляет собой полную ссылку, начинающуюся с http:// или https://). В замене можно использовать определенные части исходного пути, отмеченные круглыми скобками. При этом макрос $1 обозначает ту часть исходного пути, которая расположена внутри первой пары скобок, $2 - внутри второй пары и так далее.
Флаги - это дополнительные опции для данного правила, которые перечисляются в квадратных скобках через запятую.
Примеры (во всех случаях показано содержимое файла .htaccess, расположенного в корневом каталоге веб-сайта):
# Пример 1. Каталоги проектов project1 и project2 веб-сайта www.site.com ранее содержали статические html-страницы, теперь же эти страницы расположены на двух отдельных веб-сайтах project1.ru и project2.ru (в той же иерархии)
# Первый способ требует наличия модуля mod_proxy и создает дополнительную нагрузку на веб-сервер, но зато посетитель веб-сайта не знает, откуда в действительности выбираются веб-страницы
# Символы / даются с вопросительными знаками, чтобы правильно обработать ссылки вида http://www.site.com/project1 и http://www.site.com/project1/
RewriteRule ^project1/?(.*) http://project1.ru/$1 [P]
RewriteRule ^project2/?(.*) http://project2.ru/$1 [P]
# Второй способ возвращает внешние редиректы, так что посетитель увидит в адресной строке своего браузера, что страницы реально расположены на других веб-сайтах
RewriteRule ^project1/?(.*) http://project1.ru/$1 [R]
RewriteRule ^project2/?(.*) http://project2.ru/$1 [R]
# Допустим, что в редиректах мы желаем передать в запросе какие-нибудь дополнительные параметры. Применение флага QSA позволит нам сохранить параметры оригинального запроса, так что ссылка http://site.com/project1/news.pl?mode=daily будет преобразована в http://project1.ru/news.pl?came_from=site.com&mode=daily
RewriteRule ^project1/?(.*) http://project1.ru/$1?came_from=site.com [R,QSA]
RewriteRule ^project2/?(.*) http://project2.ru/$1?came_from=site.com [R,QSA]
# Пример 2. Электронная книга отдается динамическим скриптом в то время как нам желательно иметь "красивую" иерархию вида "http://lib.ru/book1/chapter3.html". Кстати, расширение .html помогает нам скрывать динамическую природу нашего веб-сайта
RewriteRule ^([a-z0-9]+)/([a-z0-9]+)\.html$ /cgi-bin/view_chapter.cgi?book=$1&chapter=$2 [NC]
# Пример 3. Нам желательно скрыть от пользователя используемую на веб-сайте технологию, для чего мы не будем пользоваться расширениями в наших http-ссылках. Без флага L данное правило зациклится
RewriteRule (.+) $1.html [L]
# В то же время посетитель может ввести ссылку с расширением по одному ему понятным причинам. Правильно обработать такую ситуацию поможет следующее правило:
RewriteRule ^([^.]+) $1.html [L]
# Пример 4. На веб-сайте есть статические ссылки с расширением .html и динамические ссылки с расширением .pl. Допустим, что динамические ссылки остались прежними, а статические должны обрабатываться cgi-скриптом
# Первый вариант предельно прост:
RewriteRule (.+)\.html$ /cgi-bin/new_script.cgi?page=$1 [L]
# Второй вариант более общий. Например, если нам нужно преобразовать массу различных ссылок кроме одной-двух, можно воспользоваться специальной "заменой без изменения" (обозначается символом -):
RewriteRule \.pl$ - [L]
RewriteRule (.*) /cgi-bin/new_script.cgi?page=$1 [L]
# Пример 5. Есть один особый случай, когда делается внешний редирект на относительную ссылку. Допустим, мы находимся в каталоге /home/site.com/www/test веб-сайта site.com. Каталог доступен по ссылке http://site.com/test/. Нам нужен внешний редирект с файлов *.html на *.shtml. Приводимые директивы записываются в файл /home/site.com/www/test/.htaccess
# Решение тривиально, если использовать абсолютную замену, но в этом случае нам приходится жестко прописывать название каталога, что не совсем хорошо:
RewriteRule (.+)\.html /test/$1.shtml [R]
# Если написать замену как относительную ссылку (см. ниже), то результат будет не таким, каким мы его ожидаем увидеть (это обусловлено особенностями преобразования ссылок на уровне каталогов): например, ссылка http://site.com/test/aaa.html будет преобразована в http://site.com/home/site.com/www/test/aaa.shtml
RewriteRule (.+)\.html $1.shtml [R]
# По полученной ссылке видно, что там подставлен полный реальный путь к нужному файлу. Решить проблему можно при помощи директивы RewriteBase, параметром которой является префикс для всех относительных замен, находящихся в данном файле .htaccess
RewriteBase /test
# Пример 6. Задание переменных окружения применяется очень редко, но тем не менее приведем два примера, не нуждающихся в пояснении
# Сохраняет в окружении расширение исходного файла
RewriteRule ^([^.]+)\.([a-z]+)$ /cgi-bin/new_script.cgi?page=$1 [L,E=EXT:$2]
# Сохраняет в окружении содержимое http-заголовка X-Forwarded-For
RewriteRule \.(cgi|pl)$ - [L,E=%{HTTP:X-Forwarded-For}]
Директивы RewriteRule описывают правила преобразования ссылок
Несмотря на такое изобилие, преобразование ссылок не ограничивается только директивой RewriteRule. Есть еще одна директива, которая используется не менее часто - это директива RewriteCond. Данная директива предназначена для проверки некоторых дополнительных параметров и всегда ставится непосредственно перед директивой RewriteRule. Если директива RewriteCond "срабатывает", то проверяется следующая за ней директива RewriteRule, если же "не срабатывает", то директива RewriteRule игнорируется.
# Если подряд записаны несколько директив RewriteCond, то следующая за ними директива RewriteRule проверяется только в том случае, когда "сработали" все директивы RewriteCond:
RewriteCond условие1
RewriteCond условие2
RewriteRule преобразование1
RewriteRule преобразование2
# Следует обратить внимание, что в приведенном выше примере вторая директива RewriteRule проверяется в любом случае, так как все директивы RewriteCond относятся только к первой директиве RewriteRule. Если же вы желаете, чтобы условия относились к обеим директивам RewriteRule, то вам придется повторить их еще раз:
RewriteCond условие1
RewriteCond условие2
RewriteRule преобразование1
RewriteCond условие1
RewriteCond условие2
RewriteRule преобразование2
# Применение флага OR позволяет объединять условия не по И (как это делается по умолчанию), а по ИЛИ. В следующем примере директива RewriteRule проверяется, если выполняется любое из двух предшествующих условий:
RewriteCond условие1 [OR]
RewriteCond условие2
RewriteRule преобразование
Синтаксис директивы RewriteCond выглядит следующим образом:
RewriteCond "проверяемое выражение" "условие" "флаги"
Проверяемое выражение - это строка, которая может состоять из обычных символов, макросов и переменных. Макросы $1, $2 и так далее ссылаются на соответствующие выражения в скобках из следующей по порядку директивы RewriteRule. Макросы %1, %2 и так далее ссылаются на выражения в скобках из предыдущей по порядку директивы RewriteCond. Кстати, макросы %* могут также использоваться и в директивах RewriteRule для ссылки на предыдущую директиву RewriteCond.
Переменные записываются в виде %{ИМЯ_ПЕРЕМЕННОЙ}. Наиболее часто используются следующие переменные: QUERY_STRING (параметры запроса), REMOTE_ADDR (IP-адрес посетителя), REMOTE_HOST (имя хоста посетителя), REMOTE_USER (имя пользователя, если он прошел авторизацию), REMOTE_METHOD (обычно GET или POST), PATH_INFO (путь к файлу веб-страницы), HTTP_USER_AGENT (содержимое http-заголовка User-Agent), HTTP_REFERER (содержимое http-заголовка Referer), HTTP_COOKIE (содержимое http-заголовка Cookie), HTTP_HOST (имя хоста веб-сайта), TIME_YEAR (все переменные TIME_* хранят разбитые на части текущие дату и время), TIME_MON, TIME_DAY, TIME_HOUR, TIME_MIN, TIME_SEC, TIME_WDAY, REQUEST_URI (строка запроса без имени хоста и параметров запроса), REQUEST_FILENAME (имя файла из REQUEST_URI), THE_REQUEST (полная строка запроса в том виде, в котором ее присылает браузер посетителя). Помимо стандартных переменных можно проверять содержимое любого http-заголовка: %{HTTP:Название-Заголовка}.
Условие - это обычное регулярное выражение. Кроме регулярных выражений существует еще несколько видов условий (условию может предшествовать символ !, который трактуется как отрицание):
Флагов может быть всего два: OR (объединение директив RewriteCond по ИЛИ, как было написано выше) и NC (отключение проверки регистра аналогично одноименному флагу для директивы RewriteRule).
И, наконец, примеры применения:
# Пример 1. Жесткий запрет посещений нашего веб-сайта для робота поисковой системы Google
RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [F]
# Другой вариант возвращает вместо ошибки 403 (FORBIDDEN) ошибку 404 (NOT_FOUND)
RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [R=404]
# Пример 2. Есть два каталога /home/site/storage1 и /home/site/storage2, в которых нужно искать запрашиваемые файлы
RewriteCond /home/site/storage1/%{REQUEST_FILENAME} -f
RewriteRule (.+) /home/site/storage1/$1 [L]
RewriteCond /home/site/storage2/%{REQUEST_FILENAME} -f
RewriteRule (.+) /home/site/storage2/$1 [L]
# Пример 3. Если ссылка не найдена на нашем веб-сайте, отправить посетителя на www.site.ru
RewriteCond %{REQUEST_URI} !-U
RewriteRule (.*) http://www.site.ru/$1 [R]
# Пример 4. Закрыть доступ к веб-сайту в рабочее время
RewriteCond %{TIME_HOUR}%{TIME_MIN} >1000
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule .* - [F]
# Пример 5. Есть скрипт, раз в сутки производящий оптимизацию базы данных. Если посетитель зайдет в этот момент на веб-сайт, то получит ошибку - вместо этого необходимо показать ему страницу с сообщением о том, что через пару минут все придет в норму. Оптимизирующий скрипт на время своей работы создает файл /home/site/optimizer.pid
RewriteCond /home/site/optimizer.pid -f
RewriteRule .* /optimization_message.html
# Пример 6. Посетители веб-сайта авторизуются при помощи стандартной авторизации (AuthType BasicAuth). Необходимо по ссылке /home/* показывать содержимое их домашних каталогов
RewriteCond %{REMOTE_USER} !=""
RewriteCond /home/(%{REMOTE_USER}) -d
RewriteRule (.*) /home/%1/$1
Директивы RewriteCond предназначены для проверки некоторых дополнительных параметров
И в заключение вкратце упомянем еще о двух директивах преобразования ссылок, которые не входят в модуль mod_rewrite - это Redirect и RedirectMatch. Ими можно пользоваться, во-первых, как упрощенными вариантами директивы RewriteRule, а во-вторых, в случаях, когда модуль mod_rewrite по каким-то причинам отсутствует в вашей сборке веб-сервера Apache. Примеры:
# Обе директивы при "срабатывании" возвращают редиректы. В качестве замены всегда должна использоваться абсолютная ссылка
# Обычный безусловный редирект:
Redirect /news http://www.site.com/cgi-bin/news.cgi
# Редирект с подстановкой:
RedirectMatch (.*\.gif)$ http://www.site.com/alt/path/to/gif/files$1
Возможно, на первый взгляд преобразование http-ссылок с помощью модуля mod_rewrite покажется очень сложной задачей, но на самом деле это не так: с опытом придет и понимание, и мастерство. Если вы внимательно читаете документацию, четко представляете необходимые преобразования ссылок и тщательно проверяете написанные вами правила, все будет работать правильно. Иначе и быть не может, не так ли?
<script src="/js/map.js" type="text/javascript"></script> |
<div id="geomap"></div> |
var _adress='Россия, Москва, улица , 10'; $('#geomap').livequery(function(){$.getScript('http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU',function(){ ymaps.ready(init); function init(){ var myMap = new ymaps.Map('geomap',{ center:[55.76, 37.64], zoom: 9, behaviors: ['default', 'scrollZoom'] }); myMap.controls.add('zoomControl',{left:5,top:5}).add('typeSelector').add('mapTools',{left:35,top:5}); ymaps.geocode(_adress,{results:1}).then(function(res){ var firstGeoObject=res.geoObjects.get(0), coords=firstGeoObject.geometry.getCoordinates(), bounds =firstGeoObject.properties.get('boundedBy'); myMap.setBounds(bounds,{checkZoomRange:true}); var myPlacemark = new ymaps.Placemark(coords,{iconContent:'UnMedia',balloonContent:'улица Героев Панфиловцев, д 10<br>+7 (495) 988-08-98<br>пн-пт 10:00-18:00'},{preset:'twirl#darkorangeStretchyIcon'}); myMap.geoObjects.add(myPlacemark); });r>} }); },function(){}); |
seo & website usability | inet | os faq | hardware faq | memory | video | cpu | hdd | mainboard faq | printer & scaner | modem | mobiles | hackzone |
На главную | Cookie policy | Sitemap