<?xml version="1.0" encoding="utf8"?> <rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Статьи ООО Бизнес технологии</title><description>Наша фирма предоставляет комплекc услуг по обслуживанию компьютеров, оргтехники, ноутбуков, серверов. Внедряем и дорабатываем 1С Предприятие.Создаем сайты, продвигаем в поисковиках.</description><link>http://www.group-business</link><item><title>Как запустить 1С:Предприятие из командной строки? </title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=86</link><description><![CDATA[<p>"C:Program Files1cv8in1cv8.exe" ENTERPRISE /F D:КонфигурацииТиповыеУпрТорг /N ИмяПользователя /P Пароль</p>
<p>"C:Program Files1cv8in1cv8.exe" CONFIG /F D:КонфигурацииТиповыеУпрТорг /N ИмяПользователя /P Пароль</p>
<p>"C:Program Files1cv8in1cv8.exe" ENTERPRISE /S СерверБаза /N ИмяПользователя /P Пароль</p>
<p>"C:Program Files1cv8in1cv8.exe" CONFIG /F D:КонфигурацииТиповыеУпрТорг /N ИмяПользователя /P Пароль</p>]]></description><pubDate>2011-12-26 00:00:00</pubDate></item><item><title>Настройка интернета в linux</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=84</link><description><![CDATA[<p>1. Открываем консоль &nbsp;и пишем&nbsp;<em>ifconfig</em></p>
<p>2. Если выскакивает ошибка то пишем&nbsp;<em>su</em>, вводим пароль главного админа и опять пишем&nbsp;<em>ifconfig.</em></p>
<p>Эта команда показывает информацию о подключенных сетевых соединениях и как они сейчас настроены.</p>
<p>Теперь было бы не плохо взять настройки полученные от провайдера.</p>
<p>3. &nbsp;Сейчас самое важное. Открываем и вводим настройки интернета.</p>
<p><em>sudo gedit /etc/network/interfaces</em>&nbsp;&ndash; открываем файл настроек. gedit &ndash; это редактор. Можно использовать vi kate и другие.</p>
<p>В этом файле с верху немного текста и чуть ниже должен быть текст:</p>
<p><em>auto lo</em><br /><em>iface lo inet loopback</em></p>
<p>А теперь идет шпаргалка. Кто то поймет а кто то не поймет. Задавайте вопросы с радостью помогу.</p>
<p>Ниже этого текста вводятся настройки интернета.</p>
<p>Если у Вас есть статический айпи и маска то пишем по шаблону нижеследующему.</p>
<p><em>auto eth0</em><br /><em>iface eth0 inet static</em><br /><em>address 192.168.137.1</em>&nbsp;-тут ваш IP<br /><em>netmask 255.255.255.0</em>&nbsp;-тут маска сети вашего провайдера<br /><em>broadcast 255.255.255.255</em>&nbsp;&ndash; эту строку можно не трогать точнее не писать<br /><em>hostname myname</em>&nbsp;&ndash; тут ваше сетевое имя<br />gateway 192.168.137.9 &ndash; тут шлюз вашего провайдера</p>
<p>В случае когда нету настроек или интернет дается по dhcp.</p>
<p>auto eth0</p>
<p>iface eth0 inet dhcp</p>
<p>4. Сохраняем.</p>
<p>5. Делаем рестарт интернета и возможно он уже заработает.&nbsp;<em>sudo /etc/network/interfaces restart</em></p>
<p>6. Прописываем ДНС.</p>
<p><em>sudo /etc/resolv.conf</em>&nbsp;-откроет в редакторе файл с ДНС-серверами</p>
<p><em>nameserver 83.243.64.1</em>&nbsp;&ndash; пишем ДНС своего провайдера<br /><em>nameserver 172.23.160.2&nbsp;</em>- альтернативнмй ДНС</p>
<p>7. &nbsp;Делаем рестарт интернета и возможно он уже заработает.&nbsp;<em>sudo /etc/network/interfaces restart</em></p>
<p>8. Проверяем доступность интернета.&nbsp;<em>ping ya.ru</em></p>
<p><br /><br />Источник: <a href="http://somyso.wordpress.com/category/linux/" target="_blank">http://somyso.wordpress.com/category/linux/</a></p>]]></description><pubDate>2011-12-02 00:00:00</pubDate></item><item><title>Windows не прошел проверку на подлинность</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=83</link><description><![CDATA[<p>Если в числе прочих обновлений с сайта Дяди Билла Вам &laquo;посчастливилось&raquo; скачать и установить обновление KB905474 (Windows Genuine Advantage Notification), &ndash; отныне при каждой загрузке операционной системы вы можете &laquo;любоваться&raquo; (разумеется, если вы юзаете не совсем лицензионную ОС, а точнее, совсем нелицензионную ) &ndash; в правом нижнем углу экрана &ndash; красивой табличкой &laquo; Возможно вы приобрели поддельную копию программного обеспечения . Данная копия Windows не прошла проверку подлинности &raquo;.</p>
<p>Чтобы продолжить запуск ОС, в диалоговом окне &laquo; Данная копия Windows не прошла проверку подлинности и проблема не разрешена. Данная копия Windows не обладает правами на получение полного спектра обновлений и поддержки корпорации Майкрософт . Чтобы защитить свою копию Windows , нажмите кнопку &laquo;Разрешить &raquo; нужно нажать кнопку&nbsp; Разрешить (и так &ndash; каждый раз!). Ну что, дообновлялись?! Вот вам последствия бездумного скачивания и установки обновлений!</p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify">&nbsp;</p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma; font-size: x-small;">Но не всё потеряно, можно вернуть, так сказать &laquo;былую девственность&raquo; вашей Винде ( заодно и избежать ответственность microsoft ). За отображение ( активацию ) этой чудо-таблички с уведомлением о том, что <em>Windows</em> не прошёл проверку на подлинность&nbsp;&mdash; отвечают два файла: <strong> <em> WgaTray.exe</em></strong> (329 КБ) и <strong> <em> WgaLogon.dll</em></strong> (231 КБ). Оба расположены в &laquo;сердце&raquo; <em>Windows </em><em>XP</em> </span><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash;</span></span><span style="font-family: Tahoma; font-size: x-small;"> <strong>C: WINDOWS system32</strong>. <em> WgaTray.exe</em> постоянно &laquo;висит&raquo; в памяти, и, если его отключать через <em> Диспетчер задач</em>, он запускается заново.</span></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify">&nbsp;</p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma; font-size: x-small;">Есть несколько методов решения этой проблемы (в том числе переименование/удаление <em> WgaTray.exe</em> и&nbsp;<em>WgaLogon.dll</em>, а также установка всевозможных патчей), но самый простой </span><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash;</span></span><span style="font-family: Tahoma; font-size: x-small;"> это слегка подредактировать <em>Реестр&nbsp;Windows</em>.</span></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify">&nbsp;</p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma; font-size: x-small;">Для этого нужно запустить Редактор реестра: <em> Пуск </em></span><em><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash;</span></span><span style="font-family: Tahoma; font-size: x-small;"> Выполнить&hellip; </span><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash;</span></span><span style="font-family: Tahoma; font-size: x-small;"> Запуск программы </span><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash;</span></span><span style="font-family: Tahoma; font-size: x-small;"> regedit </span><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash;</span></span></em><span style="font-family: Tahoma; font-size: x-small;"><em> OK</em>. Запустится&nbsp; Редактор реестра, в котором нужно найти и удалить раздел <strong>HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogonNotifyWgaLogon</strong></span></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify">&nbsp;</p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma; font-size: x-small;"><strong>Внимание! Будьте осторожны при манипуляциях с Реестром !</strong></span></p>
<p>Если вы испытываете затруднения с ручным редактированием Реестра (или вам просто некогда/лень разбираться с этим), скачайте и разархивируйте файл <a title="Скачать reg-файл для устранения сообщения о нелицензионности  Windows" href="http://www.ho24me.ru/pi/wga%28www.ho24me.ru%29.rar">wga.rar</a>, щелкните файл wga.reg одиночным (или двойным &ndash; в зависимости от настроек&nbsp;вашей операционной системы) щелчком. Появится диалоговое окно Редактора реестра &laquo;Вы действительно хотите&nbsp;добавить информацию из wga.reg в реестр?&raquo; &ndash; нажмите Да. Появится диалоговое окно Редактора реестра с&nbsp;сообщением, что данные из файла wga.reg были успешно внесены в реестр &ndash; нажмите OK.</p>
<p>После перезагрузки операционной системы сообщение о обнаруженной нелицензионности версии Windows&nbsp;&mdash; да не потревожит больше вашу чистую, незапятнанную пиратством совесть!</p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify">&nbsp;</p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><strong> <span style="font-family: Tahoma; font-size: x-small;">Примечание</span></strong></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma; font-size: x-small;">При установке обновления Windows XP Genuine Advantage Notification на локальный компьютер копируются следующие файлы:</span></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash; </span></span><span style="font-family: Tahoma; font-size: x-small;"><em>Windows XP Genuine Advantage Validation</em> </span><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash; </span></span><span style="font-family: Tahoma; font-size: x-small;"><strong>C: WINDOWS system32LegitCheckControl.dll</strong> (1,41 <em>МБ</em>);</span></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash; <em>Уведомление о результатах проверки подлинности</em> Windows &ndash; </span></span> <span style="font-family: Tahoma; font-size: x-small;"><strong>C: WINDOWS system32WgaLogon.dll </strong>(231 <em>КБ</em>);</span></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash; <em>Уведомления о проверке подлинности Windows</em> &ndash; </span></span> <span style="font-family: Tahoma; font-size: x-small;"><strong>C: WINDOWS system32WgaTray.exe </strong>(329 <em>КБ</em>).</span></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify">&nbsp;</p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma; font-size: x-small;">При этом в системном кэше <em>DLL</em> создаются копии файлов:</span></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash; </span></span><strong> <span style="font-family: Tahoma; font-size: x-small;">C: WINDOWS system32DllCache WgaLogon </span></strong></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify"><span style="font-family: Tahoma;"> <span style="font-size: x-small;">&ndash; </span></span><strong> <span style="font-family: Tahoma; font-size: x-small;">C: WINDOWS system32DllCache WgaTray </span></strong></p>
<p style="margin: 0pt 16px; text-indent: 16px;" align="justify">&nbsp;</p>
<p>Хотя вышеуказанного редактирования Реестра вполне достаточно для устранения сообщения о поддельности копии (как sp3 так и sp2 ), после перезагрузки <em>ПК</em> лучше удалить и эти файлы.<br /> Так же предпочтительнее будет отключить обновление о <strong><em>KB905474</em></strong> (Понель <em>Пуск</em>, около часиков&nbsp;&mdash; желтый значёк.</p>
<p>Если у вас что-то не получилось, что можно использвать этот алгоритм действий:</p>
<p>1. Пуск -&gt; Поиск (Start -&gt; Search)<br /> 2. Выбрать все файлы и папки<br /> 3. В дополнительных параметрах (More Advanced Options) выбрать Поиск в скрытых файлах и папках (Search hidden files and folders)<br /> 4. Искать &laquo;WGA&raquo; (без кавычек)<br /> 5. Когда найдет: переименовать WgaTray в WgaTray_ и грохнуть WGANotify<br /> 6. CTRL + ALT + DEL найти wgatray.exe и завершить этот процесс<br /> 7. В результатх поиска найти WGATray.Settings и открыть блокнотом (notepad)<br /> 8. ПОЛНОСТЬЮ переписать содержание вот так: Balloon interval = 9999999999 daysDaysBeforeBuyNow Unactivated = 9999999999DaysBeforeBuyNow Nongenuine = 9999999999Disabled = trueReduced reminders = true<br /> 9. Сохранить и закрыть<br /> 10. Перезагрузиться<br /> 11. Трея больше нету! Осталось предупреждение в окне загрузки<br /> 12. Пуск -&gt; Поиск (Start -&gt; Run) ввести regedit<br /> 13. Идем в куст HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstallWgaNotify<br /> 14. Убиваем два ключа, которые начинаются: NoRemove<br /> 15. Панель управления -&gt; Установка и удаление программ (Control Panel -&gt; Add or Remove Programs). Поставить галку &laquo;Показать обновления&raquo; (Show updates)<br /> 16. Windows Genuine Advantage Notifications (KB905474) Жмем &laquo;Удалить&raquo;<br /> 17. Ушло. Закрываем окна с &laquo;Панель управления&raquo; и &laquo;Установка и удаление программ&raquo;<br /> 18. Возвращаемся в реестр и полностьюудаляем папку WgaNotify: кликнуть в левой части и нажать DEL<br /> 19. Идем в куст HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionApp ManagementARPCacheWgaNotify кликаем на WgaNotify в левой части и жмем DEL<br /> 20. Идем в куст HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesEventlogSystemWgaNotify кликаем на WgaNotify в левой части и жмем DEL<br /> 21. Идем в куст HKEY_LOCAL_MACHINESYSTEMControlSet002ServicesEventlogSystemWgaNotify кликаем на WgaNotify в левой части и жмем DEL<br /> 22. Терь можно прибить суку. Идем в куст HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogonNotifyWgaLogon&nbsp;&mdash; выбираем WgaLogon в левой части и жмем DEL<br /> 23. Перезагружаемся&nbsp;&mdash; нет ничего. Загружаемся&nbsp;&mdash; нет никакого таймера!<br /> 24. САМОЕ ГЛАВНОЕ! WGA ЗАХОЧЕТ ЗАГРУЗИТЬ И ПРОИСТАЛЛИТЬ СЕБЯ ПО-НОВОЙ. ПОЭТОМУ ПРИ СЛЕДУЮЩЕМ ОБНОВЛЕНИИ СНИМИТЕ ГАЛОЧКУ С ЭТОГО ОБНОВЛЕНИЯ И ВЫБИРИТЕ ОПЦИЮ "НЕ ОТОБРАЖАТЬ ЭТО ОБНОВЛЕНИЕ!!!</p>
<p>При обновлении через встроенную опцию Microsoft Update у вас будет в первых рядах надпись, что вы запретили к установке ВАЖНЕЙШИЕ обновления и будет предложено снова вернуть их и инсталлировать.<br /> НИЧЕГО КРИТИЧЕСКОГО КРОМЕ KB905474 ТАМ НЕТУ! Любые обновления можно слить руками с даунлоад-центра MS.<br /> И самое интересное: ВАЛИДАЦИЮ ДЛЯ СЛИВА ОБНОВЛЕНИЙ ПРОХОДЯТ ДАЖЕ ЗАБАНЕННЫЕ MS КОРПОРАТИВНЫЕ КЛЮЧИ!</p>
<p>Одним словом: можно не переустанавливать Windows&nbsp;&mdash; просто не ставьте апдейт 905474!</p>]]></description><pubDate>2011-11-02 00:00:00</pubDate></item><item><title>Apache: настройки веб-сервера, файл .htaccess</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=82</link><description><![CDATA[<ul class="distant-tb">
<li><a href="../article4-82.html#apache">Несколько слов о&nbsp;веб-сервере Apache</a></li>
<li><a href="../article4-82.html#index">Индексный файл</a></li>
<li><a href="../article4-82.html#htaccess">Назначение и&nbsp;использование файла <span class="nobr">.htaccess</span></a></li>
<li><a href="../article4-82.html#recoding">Пример: как переопределить кодировку html-документов</a></li>
<li><a href="../article4-82.html#setpass">Пример: как закрыть директорию паролем</a></li>
<li><a href="../article4-82.html#re-dir-index">Пример: переопределение индексного файла</a></li>
<li><a href="../article4-82.html#listing">Пример: запрет и&nbsp;разрешение выдачи листинга</a></li>
<li><a href="../article4-82.html#error404">Пример: собственные страницы ошибок</a></li>
<li><a href="../article4-82.html#access-denied-ip">Пример: запрет доступа с&nbsp;некоторых IP-адресов</a></li>
<li><a href="../article4-82.html#deny-some-files">Пример: запрет доступа к&nbsp;некоторым файлам</a></li>
<li><a href="../article4-82.html#last-modified">Пример: заголовок last-modified</a></li>
<li><a href="../article4-82.html#cache-control">Пример: управление кэшированием</a></li>
<li><a href="../article4-82.html#redirect">Пример: как создать переадресацию</a></li>
<li><a href="../article4-82.html#alias-redirect">Пример: особенность переадресации на&nbsp;синонимах</a></li>
<li><a href="../article4-82.html#modules">Установленные модули Apache</a></li>
</ul>
<h3 id="apache">Несколько слов о&nbsp;веб-сервере Apache</h3>
<p>Мы используем Apache httpd в&nbsp;качестве основного веб-сервера. Apache используется для организации большинства веб-серверов в&nbsp;мире и&nbsp;является самым массовым продуктом своего класса. Этот сервер обладает обширными возможностями конфигурации, является очень производительным и&nbsp;поддерживает все известные протоколы для работы веб-серверов. Специально для Apache созданы версии таких популярных языков программирования как Perl и&nbsp;PHP, а&nbsp;также этот сервер легко интегрируется с&nbsp;широко применяемыми СУБД (например, MySQL).</p>
<p>Главный сайт проекта находится по&nbsp;адресу <a href="http://httpd.apache.org/">httpd.apache.org</a>, а&nbsp;основная документация по&nbsp;версии <span class="nobr">1.3.хх</span> доступна на&nbsp;странице <a href="http://httpd.apache.org/docs/">httpd.apache.org/docs/</a>.</p>
<p>Пользователям мы&nbsp;предоставляем возможность самостоятельной конфигурации Apache путем использования соответствующих директив в&nbsp;файле <a href="http://masterhost.ru/support/doc/apache/#htaccess">.htaccess</a>. Таким образом можно решить большинство задач по&nbsp;конфигурации веб-сервера в&nbsp;условиях массового хостинга.</p>
<h3 id="index">Индексный файл</h3>
<p>Индексный файл или файл-индекс&nbsp;&mdash; это тот файл, который открывается по&nbsp;умолчанию при обращении пользователя через веб к&nbsp;каталогу, а&nbsp;не&nbsp;к&nbsp;конкретному файлу. Например, ваш посетитель запросит адрес <strong>http://ваш_домен/price/</strong>, где price&nbsp;&mdash; название каталога. Индексный файл это тот файл, который будет показан пользователю при обращении к&nbsp;каталогу без указании имени конкретного файла в&nbsp;нем.</p>
<p>По умолчанию индексными файлами являются следующие: <span class="nobr">index.html,</span> <span class="nobr">index.htm,</span> <span class="nobr">index.php,</span> <span class="nobr">index.php3,</span> <span class="nobr">index.phtml,</span> <span class="nobr">index.shtml,</span> <span class="nobr">default.htm</span> или <span class="nobr">default.html.</span> Если вы&nbsp;хотите чтобы первым открывался какой-то иной файл, нужно переопределить текущие значения. Как это сделать читайте <a href="http://masterhost.ru/support/doc/apache/#re-dir-index">здесь</a>.</p>
<h3 id="htaccess">Назначение и&nbsp;использование файла <span class="nobr">.htaccess</span></h3>
<p>Файл <strong class="nobr">.htaccess</strong> (обратите внимание, что первый символ в&nbsp;названии файла&nbsp;&mdash; точка) применяется для управления веб-сервером Apache со&nbsp;стороны конечного пользователя хостинга. Вы&nbsp;помещаете в&nbsp;этот файл <a href="http://httpd.apache.org/docs/mod/directives.html">директивы</a>, которые веб-сервер воспринимает и&nbsp;обрабатывает, выполняя действия в&nbsp;соответствии с&nbsp;настройками, которые были сделаны пользователем.</p>
<p>Файл <span class="nobr">.htaccess</span> может быть размещен в&nbsp;корневом каталоге веб-сервера (прямо в&nbsp;каталоге <strong>www</strong>). В&nbsp;этом случае директивы из&nbsp;такого <span class="nobr">.htaccess</span> действуют по&nbsp;всему веб-серверу. Также <span class="nobr">.htaccess</span> может находиться и&nbsp;в&nbsp;конкретном подкаталоге сервера. Тогда директивы, которые указаны в&nbsp;этом файле, &laquo;перекрывают&raquo; действие директив из&nbsp;&laquo;основного&raquo; файла, который размещен в&nbsp;каталоге <strong>www</strong> или в&nbsp;любом каталоге более высокого уровня. То есть, действие директив из&nbsp;<span class="nobr">.htaccess</span> наследуется сверху вниз, но&nbsp;не&nbsp;наоборот. Изменения, внесенные в&nbsp;файл, вступают в&nbsp;силу немедленно. Это связано с&nbsp;тем, что информация из&nbsp;<span class="nobr">.htaccess</span> перечитывается при каждом обращении к&nbsp;веб-серверу Apache.</p>
<p>В&nbsp;<span class="nobr">.htaccess</span> может быть помещено большинство из&nbsp;<a href="http://httpd.apache.org/docs/mod/directives.html">доступных директив</a> для веб-сервера. Следует заметить, что директивы, в&nbsp;описании которых в&nbsp;поле Context отсутствует упоминание <span class="nobr">.htaccess</span> недоступны для использования в&nbsp;этом файле конфигурации. На&nbsp;примере директивы AddType видим, что поле Context содержит упоминание о&nbsp;<span class="nobr">.htaccess</span>, соответственно вы&nbsp;можете ее&nbsp;использовать:</p>
<p class="centered"><img src="http://masterhost.ru/images/support/directive-with-htaccess-context.gif" alt="" /></p>
<p>Если использовать нужную директиву не&nbsp;получилось, и&nbsp;вы&nbsp;увидели ошибку после добавления директивы в&nbsp;<span class="nobr">.htaccess</span>, скорее всего, использование команды запрещено в&nbsp;условиях виртуального хостинга. Напишите в&nbsp;<a href="http://masterhost.ru/support/doc/howtocontact/">техническую поддержку</a>, мы&nbsp;постараемся вам помочь. Просьба подробно описать проблему и&nbsp;указать цели, которых хотите достичь использованием данной директивы.</p>
<h3 id="recoding">Пример: как переопределить кодировку html-документов</h3>
<p>Мы&nbsp;хотим &laquo;объяснить&raquo; веб-серверу что все html-документы, которые размещены на&nbsp;сервере, нужно &laquo;отдавать&raquo; клиенту в&nbsp;кодировке koi8-r, а&nbsp;не&nbsp;в&nbsp;windows-1251, как это сервер делает по&nbsp;умолчанию. Для этого поместим в&nbsp;<span class="nobr">.htaccess</span> строку:</p>
<pre class="code-wrap"><code><span style="color: #000000;">AddType&nbsp;"text/html;&nbsp;charset=koi8-r"&nbsp;.html&nbsp;.htm&nbsp;.shtml</span></code></pre>
<p>Получив такой <span class="nobr">.htaccess</span>, веб-сервер Apache станет выдавать клиентскому браузеру заголовок, в&nbsp;котором будет указано, что документ имеет кодировку koi8-r.</p>
<p>Если на&nbsp;вашем ресурсе существуют html-документы в&nbsp;разных кодировках, (ISO-8859-1, Windows-1250, Windows-1252, UTF-8), то&nbsp;вам, возможно, будет необходимо отключить принудительную выдачу заголовка с&nbsp;кодировкой windows-1251. Для этого в&nbsp;<span class="nobr">.htaccess</span> добавляется строка:</p>
<pre class="code-wrap"><code><span style="color: #000000;">AddDefaultCharset&nbsp;Off</span></code></pre>
<p>При этом соответствующая кодировка должна быть прописана на&nbsp;каждой html-странице в&nbsp;виде тега</p>
<p>Это примеры простейшего использования возможностей конфигурирования Apache через файл <span class="nobr">.htaccess</span>.</p>
<h3 id="setpass">Пример: как закрыть директорию паролем</h3>
<p>Одна из&nbsp;стандартных задач, которая решается путем использования <span class="nobr">.htaccess</span>, это ограничение доступа к&nbsp;определенному каталогу на&nbsp;сервере. Например, нужно дать доступ к&nbsp;определенному каталогу отдельным посетителям, снабдив их&nbsp;при этом уникальным логином и&nbsp;паролем.</p>
<p>В каталоге, к&nbsp;которому хотим ограничить доступ по&nbsp;паролю, создаем файл <span class="nobr">.htaccess</span> с&nbsp;такими директивами:</p>
<pre class="code-wrap"><code><span style="color: #000000;">AuthType&nbsp;Basic AuthName&nbsp;"Some&nbsp;Name" AuthUserFile&nbsp;/home/<strong class="uXXXXX">uXXXXX</strong>/.htpasswd require&nbsp;valid-user&nbsp;</span></code></pre>
<p>Путь <strong>/home/uXXXXX/.htpasswd</strong> обозначает полный путь к&nbsp;файлу паролей на&nbsp;диске нашего сервера. Если, например, вы&nbsp;поместите файл <span class="nobr">.htpasswd</span> (в&nbsp;нем будут пароли) в&nbsp;домашний каталог, куда вы&nbsp;попадаете зайдя на&nbsp;сервер по&nbsp;FTP, то&nbsp;путь к&nbsp;этому файлу будет иметь вид <strong>/home/uXXXXX/.htpasswd</strong>, где <strong>uXXXXX</strong>&nbsp;&mdash; наименование вашей виртуальной площадки (например, u12345).</p>
<p>В&nbsp;директиве AuthUserFile указываем абсолютный путь к&nbsp;файлу с&nbsp;логинами/паролями, который мы&nbsp;создадим чуть позже. Если вы&nbsp;создаете файл <span class="nobr">.htaccess</span> на&nbsp;своем компьютере, а&nbsp;не сразу на&nbsp;сервере при помощи текстового редактора, обратите внимание на&nbsp;то, что <span class="nobr">.htaccess</span> должен передаваться по&nbsp;FTP <strong>строго в&nbsp;<a href="http://masterhost.ru/support/doc/ftp/#mode">текстовом (ASCII) режиме</a></strong>.</p>
<p>Создаем файл паролей. Файл с&nbsp;паролями должен содержать строки вида <strong>login:password</strong>. Пароль должен быть зашифрован с&nbsp;использованием алгоритма MD5. Один из&nbsp;способов создать такой файл&nbsp;&mdash; воспользоваться программой, входящей в&nbsp;поставку Apache&nbsp;&mdash; htpasswd (на&nbsp;нашем сервере она находится в&nbsp;каталоге <strong>/usr/local/bin/</strong>, полный путь&nbsp;&mdash; <strong>/usr/local/bin/htpasswd</strong>).</p>
<p>Рассмотрим как создать файл паролей в&nbsp;<a href="http://masterhost.ru/support/doc/shell/">unix shell</a> прямо на&nbsp;сервере. Зайдем в&nbsp;shell, и&nbsp;будем выполнять следующие команды:</p>
<ul>
<li>
<pre class="code-wrap"><code><span style="color: #000000;">htpasswd&nbsp;-mbc&nbsp;.htpasswd&nbsp;user1&nbsp;sNQ7j9oR2w</span></code></pre>
создаем новый файл <span class="nobr">.htpasswd,</span> в&nbsp;который добавляем запись для пользователя user1 с&nbsp;паролем, указанным в&nbsp;командной строке. Просьба <strong>обязательно</strong> заменить sNQ7j9oR2w на&nbsp;любой собственный пароль&nbsp;&mdash; здесь этот пароль указан только для примера</li>
<li>
<pre class="code-wrap"><code><span style="color: #000000;">htpasswd&nbsp;.htpasswd&nbsp;user2</span></code></pre>
добавляем в&nbsp;уже существующий файл <span class="nobr">.htpasswd</span> пользователя user2, а&nbsp;пароль вводим вручную в&nbsp;ответ на&nbsp;соответствующий запрос программы</li>
</ul>
<p>Если вы&nbsp;используете Windows и&nbsp;не&nbsp;хотите пользоваться unix shell для генерации паролей, можно загрузить Windows-версию программы htpasswd <a href="http://masterhost.ru/support/files/htpasswd.exe">здесь</a> и&nbsp;создать файл с&nbsp;паролями на&nbsp;своем компьютере, после чего загрузить его на&nbsp;сервер. Если у&nbsp;вас уже установлена Windows-версия Apache, файл <strong class="nobr">htpasswd.exe</strong> можно найти в&nbsp;каталоге <strong>Program FilesApache GroupApachein</strong>.</p>
<p>Итак, получите <span class="light nobr">htpasswd.exe</span> и&nbsp;используйте его для генерации паролей таким образом:</p>
<ul>
<li>
<pre class="code-wrap"><code><span style="color: #000000;">htpasswd.exe&nbsp;-mc&nbsp;.htpasswd&nbsp;user1</span></code></pre>
создаем новый файл паролей <span class="light nobr">htpasswd.exe</span>, пароль и&nbsp;его подтверждение будут запрошены интерактивно</li>
<li>
<pre class="code-wrap"><code><span style="color: #000000;">htpasswd.exe&nbsp;-m&nbsp;.htpasswd&nbsp;user2</span></code></pre>
добавляем пользователя user2 в&nbsp;существующий файл паролей <span class="light nobr">htpasswd.exe</span>, запросив пароль интерактивно</li>
</ul>
<p>После окончания заведения всех логинов файл нужно загрузить на&nbsp;сервер.</p>
<h3 id="re-dir-index">Пример: переопределение индексного файла</h3>
<p>Ситуация: пользователь обратился к каталогу <strong>http://www.ваш_домен.ru/price/.</strong> При таком запросе первым откроется и&nbsp;будет показан <a href="http://masterhost.ru/support/doc/apache/#index">индексный файл</a>. Если вы&nbsp;хотите переопределить индексный файл и&nbsp;сделать так, чтобы первым открывался не&nbsp;<span class="nobr">index.htm,</span> а,&nbsp;например, файл <strong>myindex.php</strong>, то&nbsp;сделать это можно поместив в&nbsp;файл .htaccess в&nbsp;соответствующем каталоге следующую инструкцию:</p>
<pre class="code-wrap"><code><span style="color: #000000;">DirectoryIndex&nbsp;myindex.php</span></code></pre>
<p>Получив <span class="nobr">.htaccess</span> с&nbsp;таким содержимым, веб-сервер Apache откроет по&nbsp;умолчанию именно файл <strong>myindex.php.</strong></p>
<h3 id="listing">Пример: запрет и&nbsp;разрешение выдачи листинга</h3>
<p>В&nbsp;ряде случаев требуется выводить список файлов в&nbsp;каталоге (листинг каталога) в&nbsp;случае отсутствия в&nbsp;каталоге файла, который показывается по&nbsp;умолчанию. Для этого необходимо добавить в&nbsp;<span class="nobr">.htaccess</span> следующую строку:</p>
<pre class="code-wrap"><code><span style="color: #000000;">Options&nbsp;+Indexes</span></code></pre>
<p>Файл <span class="nobr">.htaccess</span> необходимо создавать именно в&nbsp;том каталоге, в&nbsp;котором планируется разрешить листинг. Данная директива будет действовать также и&nbsp;на все подкаталоги (это достигается включенной по&nbsp;умолчанию в&nbsp;настройках виртуального хоста директивой <strong>AllowOverride All</strong>).</p>
<p>По умолчанию включена директива <strong>Options -Indexes</strong>, и&nbsp;в&nbsp;случае <a href="http://masterhost.ru/support/doc/apache/#index">отсутствия индексной страницы</a> вы&nbsp;получите <span class="nobr">HTTP ошибку&nbsp;403.</span></p>
<h3 id="error404">Пример: собственные страницы ошибок</h3>
<p>Иногда посетители веб-сервера запрашивают страницы, которые по&nbsp;каким-то причинам на&nbsp;сервере не&nbsp;существуют: неправильная ссылка с&nbsp;другой страницы или с&nbsp;другого сайта, владелец сервера случайно удалил документ и&nbsp;так далее. По умолчанию Apache выдает некую довольно аскетичную страницу, на&nbsp;которой находится сообщение вроде &laquo;File not found&raquo;. Вы&nbsp;можете создать альтернативную версию этой страницы, задав обработчик этой ошибки через <span class="nobr">.htaccess</span>. Читайте об&nbsp;этом подробнее в&nbsp;разделе &laquo;<a href="http://masterhost.ru/support/doc/errors/#403">Диагностика ошибок в&nbsp;работе сайта, обработка ошибок&nbsp;403,&nbsp;404,..</a>&raquo;.</p>
<h3 id="access-denied-ip">Пример: запрет доступа с&nbsp;некоторых IP-адресов</h3>
<p>Иногда возникает необходимость запретить доступ к&nbsp;сайту или его части с&nbsp;некоторых IP-адресов.</p>
<p>В&nbsp; таком случае необходимо создать в&nbsp;нужной директории файл <span class="nobr">.htaccess</span> с&nbsp;директивами. Например, чтобы запретить доступ с IP-адреса&nbsp;172.16.16.16:</p>
<pre class="code-wrap"><code><span style="color: #000000;">Order&nbsp;Allow,Deny Allow&nbsp;from&nbsp;All Deny&nbsp;from&nbsp;172.16.16.16</span></code></pre>
<p>Теперь при попытке обратиться к&nbsp;сайту с&nbsp;IP-адреса <strong>172.16.16.16</strong> посетитель получит ошибку 403&nbsp;или <a href="http://masterhost.ru/support/doc/errors/#403">вашу страницу для этой ошибки</a>.</p>
<p>Указание части адреса в виде <strong>172.16.16</strong> ограничит доступ из&nbsp;подсети <strong>172.16.16/24.</strong></p>
<p>С&nbsp;более подробной документацией вы&nbsp;можете ознакомиться в&nbsp;<a href="http://httpd.apache.org/docs/1.3/mod/mod_access.html" target="_blank">документации по&nbsp;Apache</a>.</p>
<h3 id="deny-some-files">Пример: запрет доступа к&nbsp;некоторым файлам</h3>
<p>Иногда возникает необходимость запретить доступ к&nbsp;определенным файлам. Например, к&nbsp;конфигурационным файлам, содержащим реквизиты доступа к&nbsp;базам данных, интерфейсам и&nbsp;<span class="nobr">т.п.</span> Допустим, в&nbsp;файле <strong>config.cfg</strong> вы&nbsp;храните логин/пароль доступа к&nbsp;базе данных. Создаем в&nbsp;этой директории файл <span class="nobr">.htaccess</span> с&nbsp;директивами:</p>
<pre class="code-wrap"><code><span style="color: #000000;"> Order&nbsp;allow,deny Deny&nbsp;from&nbsp;all </span></code></pre>
<p>Теперь, если посетитель наберет в&nbsp;браузере нечто вида <strong>http://www.ваш_домен.ru//config.cfg</strong>, он&nbsp;получит ошибку 403&nbsp;или <a href="http://masterhost.ru/support/doc/errors/#403">вашу страницу</a> для этой ошибки.</p>
<h3 id="last-modified">Пример: заголовок last-modified</h3>
<p>В&nbsp;ряде случаев требуется, чтобы web-сервер выдавал HTTP-заголовок <strong>Last-Modified</strong>. К примеру, при регистрации вашего ресурса на&nbsp;<a href="http://yandex.ru/">Яндексе</a>, возникает ошибка &laquo;<a href="http://www.yandex.ru/info/webmaster5.html#dates">Неправильные даты</a>&raquo;. Для статических документов cервер будет выдавать значение last-modified всегда. Это действительно для html-файлов. Для <a href="http://masterhost.ru/support/doc/ssi/">SSI</a> cервер будет выдавать значение last-modified в&nbsp;том случае, если прописана директива &laquo;XBitHack full&raquo; (просто пропишите эту строку в&nbsp;<span class="nobr">.htaccess</span>), и&nbsp;для файла, к&nbsp;которому происходит обращение, выставлен атрибут &laquo;исполняемый&raquo; для группы. В&nbsp;скриптах last-modified выдается иными средствами. Например, если учесть то, что php-скрипт генерирует код динамически, то&nbsp;самым логичным будет в&nbsp;качестве last-modified отдавать текущую дату и&nbsp;время./&gt;</p>
<p>Реализуется это следующим образом:</p>
<pre class="code-wrap"><code><span style="color: #000000;"><span style="color: #0000bb;"><span style="color: #007700;">(</span><span style="color: #dd0000;">"Last-Modified:&nbsp;"&nbsp;</span><span style="color: #007700;">.&nbsp;</span><span style="color: #0000bb;">gmdate</span><span style="color: #007700;">(</span><span style="color: #dd0000;">"D,&nbsp;d&nbsp;M&nbsp;Y&nbsp;H:i:s"</span><span style="color: #007700;">)&nbsp;.&nbsp;</span><span style="color: #dd0000;">"&nbsp;GMT"</span><span style="color: #007700;">);&nbsp;</span><span style="color: #0000bb;">?&gt;</span></span></span></code></pre>
<p><em>Внимание: команда <strong>header</strong> должна выполняться в&nbsp;php-скрипте до&nbsp;того, как скрипт начнет выдавать html-текст в&nbsp;браузер пользователя.</em></p>
<p>Полезные ссылки по&nbsp;теме:</p>
<ul>
<li><a href="http://www.php.net/manual/en/function.header.php">Функция header</a></li>
<li><a href="http://www.php.net/manual/en/ref.apache.php">Функции для работы с&nbsp;сервером Apache</a></li>
</ul>
<h3 id="cache-control">Пример: управление кэшированием</h3>
<p>Для того, чтобы сайт работал максимально эффективно, целесообразно устанавливать время кэширования для различных типов файлов на&nbsp;максимально возможный срок. Для этого существует модуль Apache <a href="http://httpd.apache.org/docs/1.3/mod/mod_expires.html">mod_expires</a>.</p>
<p>Настройка параметров модуля mod_expires производится в&nbsp;файле <a href="http://masterhost.ru/support/doc/apache/#htaccess">.htaccess</a>, что позволяет сделать индивидуальные настройки для каждого каталога.</p>
<p>В&nbsp;приведенном ниже примере отключено кэширование для текстовых документов, установлен период обновления для файлов с&nbsp;расширением gif&nbsp;&mdash; 3&nbsp;месяца с&nbsp;момента изменения файла, для файлов с&nbsp;расширением jpeg&nbsp;&mdash; 1&nbsp;день с момента обращения:</p>
<pre class="code-wrap"><code><span style="color: #000000;">ExpiresActive&nbsp;on ExpiresByType&nbsp;image/jpeg&nbsp;"access&nbsp;plus&nbsp;1&nbsp;day" ExpiresByType&nbsp;image/gif&nbsp;"modification&nbsp;plus&nbsp;3&nbsp;months" ExpiresByType&nbsp;text/html&nbsp;"now"</span></code></pre>
<p><em>Примечание: При использовании <a href="http://parser.ru/">Parser</a> если вам необходимо полностью исключить заголовки от&nbsp;модуля <a href="http://httpd.apache.org/docs/1.3/mod/mod_expires.html">Apache mod_expires</a>, то&nbsp;для этого необходимо в&nbsp;директории с&nbsp;parser3.cgi создать файл <span class="nobr">.htaccess</span> и&nbsp;внести в&nbsp;него следующую директиву: <strong>ExpiresActive off</strong></em></p>
<h3 id="redirect">Пример: как создать переадресацию</h3>
<ul>
<li>Если у&nbsp;вас размещены 2&nbsp;домена (не&nbsp;обязательно на&nbsp;одной площадке) <strong>domain1.tld</strong> и&nbsp;<strong>domain2.tld,</strong> и&nbsp;вам необходимо, чтобы при обращении к&nbsp;<strong>domain2.tld</strong> у&nbsp;пользователей изменялся адрес на&nbsp;&laquo;правильный&raquo;, и&nbsp;сразу происходило перенаправление, тогда добавьте для домена <strong>domain2.tld</strong> переадресацию на&nbsp;<strong>http://domain1.tld/</strong>. О&nbsp;том, как это сделать, написано в&nbsp;<a href="http://masterhost.ru/support/faq/cp/services/#domain-redirect">следующей статье</a>.</li>
<li>
<p>Если вам необходимо, чтобы при обращении к&nbsp;вашему домену <strong>domain.tld</strong> происходило автоматическое перенаправление на&nbsp;<strong>www.domain.tld,</strong> создайте на&nbsp;виртуальной площадке в&nbsp;директории <strong>/home/uXXXX/domain.tld/www</strong> файл <span class="nobr">.htaccess</span> (обратите внимание на&nbsp;то, что название файла начинается с&nbsp;точки) следующего содержания:</p>
<pre class="code-wrap"><code><span style="color: #000000;">RewriteEngine&nbsp;on RewriteCond&nbsp;%{HTTP_HOST}&nbsp;^<span class="accent">domain.tld</span> RewriteRule&nbsp;^(.*)$&nbsp;http://www.<span class="accent"><strong class="uXXXXX">domain.tld</strong></span>/$1&nbsp;[R=permanent,L]</span></code></pre>
где <strong>uXXXX&nbsp;&mdash;</strong> имя вашей виртуальной площадки, <strong>domain.tld&nbsp;&mdash;</strong> имя вашего домена.</li>
<li>О&nbsp;создании переадресаций с&nbsp;другими условиями, вы&nbsp;можете узнать из&nbsp;<a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html">документации по&nbsp;web-серверу Apache</a>.</li>
</ul>
<h3 id="alias-redirect">Пример: особенность переадресации на&nbsp;синонимах</h3>
<p>Предположим, есть домен <strong>domain1.tld</strong> и&nbsp;синоним <strong>domain2.tld.</strong> Если запросить в&nbsp;браузере адрес <strong>http://domain2.tld/dir/</strong> со&nbsp;знаком слэша в&nbsp;конце, то&nbsp;будет отображена индексная страница из&nbsp;директории <strong>dir</strong> основного домена, при этом содержимое адресной строки браузера останется без изменений. Но&nbsp;если запросить <strong>http://domain2.tld/dir</strong> без слэша в&nbsp;конце, то&nbsp;произойдёт переадресация на&nbsp;<strong>http://domain1.tld/dir/,</strong> и&nbsp;содержимое адресной строки изменится соответствующим образом.</p>
<p>Такова особенность работы модуля <a href="http://httpd.apache.org/docs/1.3/mod/mod_dir.html" target="_blank">mod_dir</a>, при которой если происходит запрос файла, являющегося директорией, но&nbsp;запрос не&nbsp;оканчивается знаком слэш, то&nbsp;mod_dir осуществляет внешнюю переадресацию на&nbsp;тот&nbsp;же&nbsp;адрес со&nbsp;знаком слэша в&nbsp;конце. В&nbsp;случае синонима при переадресации заменяется и&nbsp;имя домена.</p>
<p>Если такое поведение веб-сервера вас не&nbsp;устраивает, добавьте в&nbsp;файл <a class="nobr" href="http://masterhost.ru/support/doc/apache/#htaccess">.htaccess</a> следующие строки:</p>
<pre class="code-wrap"><code><span style="color: #000000;">RewriteEngine&nbsp;on RewriteCond&nbsp;%{REQUEST_FILENAME}&nbsp;-d RewriteCond&nbsp;%{REQUEST_URI}&nbsp;!^<span class="accent">domain2.tld</span>$ RewriteRule&nbsp;^(.+[^/])$&nbsp;http://<span class="accent">domain2.tld</span>/$1/&nbsp;[R]</span></code></pre>
<p>О&nbsp;создании переадресаций с&nbsp;другими условиями вы&nbsp;можете узнать из&nbsp;<a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html" target="_blank">документации по&nbsp;web-серверу Apache</a>.</p>
<h3 id="modules">Установленные модули Apache</h3>
<p>Список стандартных и&nbsp;дополнительных модулей для веб-сервера Apache, которые установлены на&nbsp;хостинговых машинах:</p>
<ul>
<li>mod_env</li>
<li>mod_log_config</li>
<li>mod_mime</li>
<li>mod_status</li>
<li>mod_include</li>
<li>mod_autoindex</li>
<li>mod_dir</li>
<li>mod_cgi</li>
<li>mod_actions</li>
<li>mod_alias</li>
<li>mod_rewrite</li>
<li>mod_access</li>
<li>mod_auth</li>
<li>mod_expires</li>
<li>mod_setenvif</li>
<li>mod_php</li>
</ul>
<p>Наши пользователи могут конфигурировать и&nbsp;использовать данные модули в&nbsp;рамках, которые предусмотрены техническими стандартами и&nbsp;тарифным планом конкретного пользователя.</p>]]></description><pubDate>2011-11-01 00:00:00</pubDate></item><item><title>Установка БД Oracle 9 на RED HAT Enterprise Linux</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=80</link><description><![CDATA[<pre>Оригинал: <a href="http://conrad2001.narod.ru/terek/oracle9204linux.htm">http://conrad2001.narod.ru/terek/oracle9204linux.htm</a>
    
   Установка БД Oracle 9.2.0.4.0 на RED HAT Enterprise Linux AS 3 (x86)
   (Пошаговая инструкция)


   Данный документ основан на фирменных документациях по инсталляции баз
   данных Oracle9.2.0.4 и Oracle10g, а также на документации от Werner
   Puschitz, расположенной по адресу <a href="http://www.puschitz.com/InstallingOracle9i.shtml">http://www.puschitz.com/InstallingOracle9i.shtml</a>

Шаг 1.
------

   Минимальные требования к оборудованию согласно официальной документации:

       Физическая память             - 512 MB

       Swap space (раздел подкачки)  - 1 GB   (дисковый раздел, создается при 
                                               инсталляции Linux)
       Disk Space in /tmp            - 400 MB (раздел для временных файлов)

       Disk space for software files - 2,5 GB (минимальный объем дискового пространства 
                                               для программных файлов)
       Disk space for database files - 1,2 GB (минимальный объем дискового пространства 
                                               для файлов баз данных)


   При инсталляции Linux на сервере с тремя SCSI-дисками по 70 Gb я
   создал следующие разделы:

   1-й диск /sda:
         /dev/sda1            /boot         102 Mb
         /dev/sda2            /             36993 Mb
         /dev/sda3            /swap         1992 Mb
         /dev/sda5            /u01          30004 Mb
         /dev/sda6            /tmp          910 Mb

   2-й диск /sdb:
         /dev/sdb1            /u02          70000 Mb

   3-й диск /sdc:
         /dev/sdc1            /u03          70000 Mb

   Выбираем тип инсталляции - Сервер, соглашаемся с предложенными
   пакетами по умолчанию и жмем кнопку Next.


Шаг 2.
------

   После инсталляции требуется установить следующие программные пакеты:
  
       binutils-2.11
       compat-db-4.0.14.5
       compat-gcc-7.3-2.96.122
       compat-gcc-c++-7.3-2.96.122
       compat-libstdc++-7.3-2.96.122
       compat-libstdc++-devel-7.3-2.96.122
       gcc-3.2.3-2
       gcc-c++-3.2.3-20
       gnome-libs-1.4.1.2.90-34.1
       libpng10-1.0.13-8
       make-3.79
       openmotif-2.2.2-16
       openmotif21-2.1.30-8
       setarch-1.3-1

   Проверка наличия установленных пакетов:

       $ rpm -q package_name
       Например: rpm -q binutils-2.11

   Установка пакета:

       $ rpm -Uvh package_name
       Например: rpm -Uvh binutils-2.11.i386.rpm

Шаг 3.
------

   Создаем группы и пользователей:
       - oinstall group (Oracle Inventory group)
       - dba group (OSDBA group)
       - oracle user (Oracle software owner)

   Проверяем существование групп:
       # grep oinstall /etc/group
       # grep dba /etc/group

   и если не существуют, то создаем их:
       # /usr/sbin/groupadd oinstall
       # /usr/sbin/groupadd dba

   Проверяем существование пользователя oracle:
       # id oracle

   И если не существует,то создаем его:
       # /usr/sbin/useradd -g oinstall -G dba oracle

   Эта команда создает пользователя oracle,входящего в:
       - oinstall  -&gt; первичная группа
       - dba       -&gt; вторичная группа

   Создание требуемых директорий:
       - /u01/app/oracle -&gt; основная директория Oracle
       - /u02/oradata    -&gt; директория баз данных Oracle(необязательно), в моем 
		            случае базы данных будут расположены на 2-м диске

   Для основной директорииOracle должно быть не менее 2,5 GB дискового
   пространства или 3,7 GB, если Вы не создали директорию баз данных Oracle.

    Проверьте размер дисковой памяти командой 
	# df -k
   /u01 - точка монтирования для основной директории Oracle (1-й диск)
   /u02 - точка монтирования для директории баз данных Oracle (2-й диск)

   Создаем рабочие директории:
       # mkdir -p /u01/app/oracle
       # mkdir /u02/oradata

   Назначаем права пользователю oracle и группе oinstall на созданные директории:
       # chown -R oracle:oinstall /u01/app/oracle /u02/oradata

   Назначаем разрешения:
       # chmod -R 775 /u01/app/oracle /u02/oradata


Шаг 4.
------

   Конфигурирование параметров ядра (см.рекомендованные параметры):

   ---------------------------------------------------------------
   Parameter		Value		File

   semmsl		100		/proc/sys/kernel/sem
   semmns		32000
   semopm		100
   semmni		100

   shmall		2097152		/proc/sys/kernel/shmall

   shmmax		Half the	/proc/sys/kernel/shmmax
			size of
		        physical
		        memory
		        (2147483648)

   shmmni		4096		/proc/sys/kernel/shmmni

   file-max		65536		/proc/sys/fs/file-max

   ip_local_port_range  1024 65000	/proc/sys/net/ipv4/ip_local_port_range
   ---------------------------------------------------------------

   Выполните следующие команды для проверки параметров ядра:

   ---------------------------------------------------------------
   Parameter			Command

   semmsl, semmns,		/sbin/sysctl -a | grep sem
   semopm, and
   semmni

   shmall, shmmax,		/sbin/sysctl -a | grep shm
   and shmmni

   file-max			/sbin/sysctl -a | grep file-max

   ip_local_port_range		/sbin/sysctl -a | grep ip_local_port_range
   ---------------------------------------------------------------

   Если значения не совпадают с рекомендованными, то используя любой
   текстовый редактор создайте или отредактируйте файл /etc/sysctl.conf:
       kernel.shmall = 2097152
       kernel.shmmax = 2147483648
       kernel.shmmni = 4096
       kernel.sem = 250 32000 100 100
       fs.file-max = 65536
       net.ipv4.ip_local_port_range = 1024 65000

   Затем перезагрузите систему. Поверьте еще раз параметры ядра командой:
       # /sbin/sysctl -p


Шаг 5.
------

   Установка Shell Limits для пользователя oracle:

   ---------------------------------------------------------------
   Shell Limit				Item in limits.conf	Hard Limit

   Maximum number of open 		nofile 			65536
   file descriptors

   Maximum number of processes 		nproc			16384
   available to a single user
   ---------------------------------------------------------------

   1.Добавьте следующие строки в файл etc/security/limits.conf
	*  soft  nproc 2047
	*  hard nproc 16384
	*  soft  nofile 1024
	*  hard nofile 65536

   2.Добавьте строку в файл /etc/pam.d/login
       session     required      /lib/security/pam_limits.so

   Для командных оболочек Bourne,Bash или Korn добавьте строки в файл /etc/profile

	   if [ $USER = "oracle" ]; then
              if [ $SHELL = "/bin/ksh" ]; then
                    ulimit -p 16384
                    ulimit -n 65536
              else
                    ulimit -u 16384 -n 65536
    	      fi
           fi

Шаг 6.
------

   Добавьте следующие строки в файл пользовательского окружения
   переменных /home/oracle/.bash_profile
 
       umask 022
       export LD_ASSUME_KERNEL=2.4.1
       export ORACLE_BASE=/u01/app/oracle
       export ORACLE_HOME=/u01/app/oracle/OraHome1
       export ORACLE_SID=inventor
       export ORACLE_TERM=xterm
       export NLS_LANG=AMERICAN
       export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
       LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
       LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
       export LD_LIBRARY_PATH
       export PATH=$PATH:$ORACLE_HOME/bin
       TEMP=/tmp
       TMPDIR=/tmp
       export TEMP TMPDIR

   Затем выполните следующие команды:

       su - root
       mv /usr/bin/gcc /usr/bin/gcc323
       ln -s /usr/bin/gcc296 /usr/bin/gcc
       mv /usr/bin/g++ /usr/bin/g++323     -если g++ не существует,то
                                           пакет gcc-c++-3.2.3-20 не установлен
       ln -s /usr/bin/g++296 /usr/bin/g++


Шаг 7.
------

   Желательно скопировать дистрибутивы Oracle 9.2.0.4.0 на жесткий диск и
   производить установку с жесткого диска.
   Я скопировал дистрибутивы на 3-й диск в /u03/distr/ora9i:
       /u03/distr/ora9i/Disk1
       /u03/distr/ora9i/Disk2
       /u03/distr/ora9i/Disk3

Шаг 8.
------

   Проделайте следующие действия в окне терминала:

       $ su - root
       $ xhost +127.0.0.1
       $ su - oracle
       $ DISPLAY=127.0.0.1:0.0
       $ export DISPLAY

   Проверьте правильность переменных окружения, выполнив команды:

       $ env | more
       Затем  выполним  обнуление  переменных окружения:
       $ unset ORACLE_HOME
       $ unset TNS_ADMIN
       $ unset JAVA_HOME

   Внимание!!!  Если сейчас запустить инсталлятор командой
       /u03/distr/ora9i/Disk1/runInstaller

   то получим следующее сообщение об ошибке:
       Error occurred during initialization of VM
       Unable to load native library:
       /tmp/OraInstall2003-10-25_03-14-57PM/jre/lib/i386/libjava.so:
       symbol __libc_wait, version GLIBC_2.0 not defined in file
       libc.so.6 with link time reference

   Эта ошибка есть баг дистрибутива, и поэтому качаем патч
   <a href="http://conrad2001.narod.ru/terek/p3006854_9204_LINUX.zip">http://conrad2001.narod.ru/terek/p3006854_9204_LINUX.zip</a>, открываем  
   другое окно терминала и делаем следующее:
    
       # su - root
       # unzip p3006854_9204_LINUX.zip
       # cd 3006854
       # sh rhel3_pre_install.sh

   Программа должна выдать сообщение:
   Applying patch...
   Patch successfully applied

   Закрываем это окно терминала и переключаемся в &lt;&lt;свое&gt;&gt; окно терминала
   и выполняем команду:
       /u03/distr/ora9i/Disk1/runInstaller

   Устанавливаем Oracle.

   На завершающем этапе установки, когда Oracle запускает соответствующие
   службы, выдается ошибка,связанная с Oracle Intelligent Agent:

       Parameter "orahome" = /u01/app/oracle
       Parameter "nodeinfo" = NO_VALUE
       Agent Service Failed

   Завершаем процесс инсталляции (Next -&gt; Exit)
   Если запустить Oracle Intelligent Agent вручную командой

       $ agentctl start

   как рекомендовано в фирменной документации,то программа выдаст ошибку:

       DBSNMP for Linux: Version 9.2.0.4.0 - Production on 07-JAN-2004 19:11:14
       Copyright (c) 2003 Oracle Corporation.  All rights reserved.
       Starting Oracle Intelligent
       Agent.../opt/oracle/product/9.2.0/bin/dbsnmpwd: line 156:  1855
       Segmentation fault      nohup $ORACLE_HOME/bin/dbsnmp $*
       &gt;&gt;$DBSNMP_WDLOGFILE 2&gt;&amp;1
       /opt/oracle/product/9.2.0/bin/dbsnmpwd: line 156:  1868 Segmentation
       fault      nohup $ORACLE_HOME/bin/dbsnmp $* &gt;&gt;$DBSNMP_WDLOGFILE 2&gt;&amp;1
       /opt/oracle/product/9.2.0/bin/dbsnmpwd: line 156:  1880 Segmentation
       fault      nohup $ORACLE_HOME/bin/dbsnmp $* &gt;&gt;$DBSNMP_WDLOGFILE 2&gt;&amp;1
       /opt/oracle/product/9.2.0/bin/dbsnmpwd: line 156:  1892 Segmentation
       fault      nohup $ORACLE_HOME/bin/dbsnmp $* &gt;&gt;$DBSNMP_WDLOGFILE 2&gt;&amp;1

   Поэтому качаем патчи <a href="http://conrad2001.narod.ru/terek/p2617419_220_GENERIC.zip">http://conrad2001.narod.ru/terek/p2617419_220_GENERIC.zip</a>
    и <a href="http://conrad2001.narod.ru/terek/p3238244_9204_LINUX.zip">http://conrad2001.narod.ru/terek/p3238244_9204_LINUX.zip</a> и делаем следующее:

       # su - oracle
       $ cp p2617419_210_GENERIC.zip /tmp (копируем в /tmp)
       $ cd /tmp
       $ unzip p2617419_210_GENERIC.zip
       $ export PATH=$PATH:/tmp/OPatch
       $ export PATH=$PATH:/sbin
       $ which opatch
	 /tmp/OPatch/opatch
       $ unzip p3238244_9204_LINUX.zip
       $ cd 3238244
       $ opatch apply

   Затем мы должны перелинковать dbsnmp. Вначале проверяем наличие в
   системе файлов ins_oemagent.mk и env_oemagent.mk

       $ su - oracle
       $ find $ORACLE_HOME -name "*.mk" | xargs grep -l dbsnmp
	 /opt/oracle/product/9.2.0/network/lib/ins_oemagent.mk
         /opt/oracle/product/9.2.0/network/lib/env_oemagent.mk
       $

   И наконец производим перелинковку:

       $ su - oracle
       $ cd $ORACLE_HOME/network/lib
       $ make -f ins_oemagent.mk install

   Выполняем запуск Oracle Intelligent Agent
       $ agentctl start

   Теперь Oracle Intelligent Agent должен запуститься нормально.
   Все! Oracle 9.2.0.4.0 установлен!

   Автор: Terek &lt;terek777 at mail.ru&gt;

PS. Копию патчей можно найти по адресу: <a href="http://www.opennet.ru/soft/ora_inst/">http://www.opennet.ru/soft/ora_inst/</a></pre>]]></description><pubDate>2011-10-30 00:00:00</pubDate></item><item><title>Установка сервера Oracle Database 11g R1</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=81</link><description><![CDATA[<p class="Block">Первый урок будет посвящен установке сервера Oracle. Производить установку будем на SuSe Linux Enterprise Server 10.3. Если у вас нет SLES 10.3, то может подойти любая из перечисленных ниже операционных систем:</p>
<ul>
<li>Asianux 2.0</li>
<li>Asianux 3.0</li>
<li>Oracle Enterprise Linux 4.0</li>
<li>Oracle Enterprise Linux 5.0</li>
<li>Red Hat Enterprise Linux 4.0</li>
<li>Red Hat Enterprise Linux 5.0</li>
<li>SUSE Enterprise Linux 10.0</li>
</ul>
<p class="Block">Эти операционные системы официально рекомендованы Oracle и сертифицированы для Oracle Database 11g. Кроме того, можно проводить установку на операционную систему семейства Windows. Процесс установки на различных платформах практически идентичен.</p>
<p class="Block">Весь процесс установки подробно описывается в Quick Installation Guide11g Release 1 (11.1) for Linux x86. Кроме того, в этом документе описываются требования к программному и аппаратному обеспечению.</p>
<p>Все примеры и настройки будут выполняться на:</p>
<ul>
<li>SuSe Enterprise Linux 10.3 32bit</li>
<li>Oracle Database 11g (11.1.0.7.0) 32bit</li>
</ul>
<h5>Проверка версии ядра</h5>
<p class="Block">Для установки Oracle 11g на SuSe Linux Enterprise Server 10 требуется версия ядра не ниже 2.6.16.21. Проверить версию ядра можно выполнив команду:</p>
<p class="DOS"># uname &ndash;r</p>
<h5>Установка требуемых пакетов</h5>
<p class="Block">Следующие пакеты должны быть установлены в системе (указанной версии или выше):</p>
<ul>
<li>binutils-2.16.91.0.5</li>
<li>compat-libstdc++-5.0.7</li>
<li>gcc-4.1.0</li>
<li>glibc-2.4-31.2</li>
<li>glibc-devel-2.4-31.2</li>
<li>ksh-93r-12.9</li>
<li>libaio-0.3.104</li>
<li>libaio-devel-0.3.104</li>
<li>libelf-0.8.5</li>
<li>libgcc-4.1.0</li>
<li>libstdc++-4.1.0</li>
<li>libstdc++-devel-4.1.0</li>
<li>make-3.80</li>
<li>sysstat-6.0.2</li>
</ul>
<p>Для других ОС смотрите требования в руководстве по установке. Для того, что бы узнать установлен тот или иной пакет, выполните команду:</p>
<p class="DOS"># rpm -q &lt;имя_пакета&gt;</p>
<p>Если пакет не установлен, то установите из дистрибутива или загрузите с сайта разработчика средствами автоматической установки.</p>
<h5>Создание необходимых пользователей и групп операционной системы</h5>
<p>Для установки сервера баз данных требуется создать следующих пользователей и группы:</p>
<ul>
<li>Группа OSDBA (dba) &ndash; эта группа создается перед установкой программного обеспечения Oracle Database. Она идентифицирует пользователей имеющих администраторские привилегии (привилегии SYSDBA). По-умолчанию, имя этой группы dba.</li>
<li>Группа OSOPER (oper) &ndash; эта группа опциональна, если вы хотите отделить пользователей операционной системы с ограниченными администраторскими привилегиями (привилегии SYSOPER). По-умолчанию, члены группы OSDBA так же имеют привилегии SYSOPER. Обычно имя этой группы &ndash; oper.</li>
<li>Группа OSASM (asmadmin) &ndash; это новая привилегия, для выполнения задач по администрированию Automatic Storage Management. Используя привилегию SYSASM внутри привилегии SYSDBA стирает разделение между администратором базы данных и администратором Automatic Storage Management. Группа OSASM, представлена в Oracle 11g. Члены группы могут соединятся, как SYSASM, используя аутентификацию операционной системы и имеют полный доступ к Automatic Storage Management. Обычно имя группы asmadmin.</li>
</ul>
<p>Следующая группа операционной системы необходимая для установки: группа Oracle Inventory (обычно, oinstall) &ndash; должна быть группа с доступом на запись в Oracle Central Inventory (oraInventory). Oracle Central Inventory содержит:</p>
<ul>
<li>Реестр домашних директорий Oracle (Oracle database и Automatic Storage Management)</li>
<li>Журналы установки и файлы отладки от установки программного обеспечения Oracle</li>
</ul>
<p>Пользователь, владелец программного обеспечения Oracle: обычно это пользователь oracle, этого пользователя требуется создать до установки программного обеспечения. Этот пользователь должен имеет группу Oracle Inventory как первичную. И вторичной одну из групп OSDBA или OSASM. Итак, создадим требуемые группы:</p>
<p>Сначала проверяем, существуют ли такие группы:</p>
<p class="DOS"># grep oinstall /etc/group<br /># grep dba /etc/group</p>
<p>и если нет, то создаем:</p>
<p class="DOS"># /usr/sbin/groupadd oinstall<br /># /usr/sbin/groupadd dba</p>
<p>Далее требуется создать пользователя, владельца экземпляра Oracle. Проверяем, есть ли уже такой пользователь:</p>
<p class="DOS"># id oracle</p>
<p>Если такой пользователь существует, то на экран терминала будет выведена информация о пользователе и группах которым он принадлежит:</p>
<p class="DOS">uid=440(oracle) gid=200(oinstall) groups=201(dba),202(oper)</p>
<p>Если такого пользователя нет, то выполняем:</p>
<p class="DOS"># /usr/sbin/useradd -g oinstall -G dba oracle</p>
<p>Если же пользователь существует, но его первичная группа не oinstall, то выполняем следующую команду:</p>
<p class="DOS"># /usr/sbin/usermod -g oinstall -G dba oracle</p>
<p>После того как пользователь создан, задем ему пароль:</p>
<p class="DOS"># passwd oracle</p>
<p>После ввода команды, система попросит указать пароль для пользователя и подтвердить ввод.</p>
<h5>Конфигурация ядра Linux</h5>
<p>Следующим шагом является установка параметров ядра, согласно документации Oracle:</p>
<p class="DOS">fs.file-max = 512 * PROCESSES<br />kernel.shmall = 2097152<br />kernel.shmmax = 2147483648<br />kernel.shmmni = 4096<br />kernel.sem = 250 32000 100 128<br />net.ipv4.ip_local_port_range = 1024 65000<br />net.core.rmem_default = 4194304<br />net.core.rmem_max = 4194304<br />net.core.wmem_default = 262144<br />net.core.wmem_max = 262144<br />net.ipv4.tcp_wmem = 262144 262144 262144<br />net.ipv4.tcp_rmem = 4194304 4194304 4194304</p>
<p class="Block">Значения параметров выставляются в файле /etc/sysctl.conf, после внесения изменений требуется выполнить перезагрузку. Если какое либо из значений больше требуемого, то вносить изменения не требуется.</p>
<p>На SuSe системах требуется выполнить:</p>
<p class="DOS"># /sbin/chkconfig boot.sysctl on</p>
<p>И указать GID группы oinstall, как значение параметра /proc/sys/vm/hugetlb_shm_group, это позволит пользователю создавать сегмент общей памяти.</p>
<h5>Создание директорий для Oracle</h5>
<p class="Block">При создании директорий следует учитывать, что для программного обеспечения потребуется порядка 3 Гб места, и еще потребуется место в дальнейшем для хранения файлов данных.</p>
<p class="DOS"># mkdir -p /u01/app/<br /># chown -R oracle:oinstall /u01/app/<br /># chmod -R 775 /u01/app/</p>
<p>В директории /tmp должно быть не менее 400 Мб доступного места.</p>
<p>Для промышленной эксплуатации не рекомендуется размещать вместе программное обеспечение и базу данных. Для хранения файлов базы данных выполняем команды:</p>
<p class="DOS"># mkdir /mount_point/oradata<br /># chown oracle:oinstall /mount_point/oradata<br /># chmod 775 /mount_point/oradata</p>
<p>Например, для нашей установки, точка монтирования будет такой же, как и для программного обеспечения /u01:</p>
<p class="DOS"># mkdir /u01/oradata<br /># chown oracle:oinstall /u01/oradata<br /># chmod 775 /u01/oradata</p>
<p>Для хранения файлов Flash recovery area:</p>
<p class="DOS"># mkdir /u01/flash_recovery_area<br /># chown oracle:oinstall /u01/flash_recovery_area<br /># chmod 775 /u01/flash_recovery_area</p>
<p>Установка и настройка ASM подробнее будет рассмотрена в дальнейших уроках, и сейчас рассматриваться не будет.</p>
<h5>Установка Oracle Database</h5>
<p class="Block">Когда все подготовительные операции выполнены, можно переходить к установке Oracle. Далее, все действия по установке и настройки выполняются под созданным нами пользователем oracle. Логинимся как oracle, переходим в каталог с дистрибутивом Oracle, на жестком диске или DVD диске, и находим исполняемый файл runInstaller. Запускаем его:</p>
<p class="DOS">oracle@test:/tmp/oracle_distr/database&gt; ./runInstaller<br />Starting Oracle Universal Installer...<br /><br />Checking Temp space: must be greater than 80 MB.&nbsp;&nbsp; Actual 208116 MB&nbsp;&nbsp;&nbsp; Passed<br />Checking swap space: must be greater than 150 MB.&nbsp;&nbsp; Actual 3969 MB&nbsp;&nbsp;&nbsp; Passed<br />Checking monitor: must be configured to display at least 256 colors.&nbsp;&nbsp;&nbsp; Actual 16777216&nbsp;&nbsp;&nbsp; Passed<br />Preparing to launch Oracle Universal Installer from /tmp/OraInstall2009-02-08_05-14-09PM. Please wait ...oracle@test:/tmp/oracle_distr/database&gt; libxcb: <br />WARNING! Program tries to unlock a connection without having acquired<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a lock first, which indicates a programming error.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; There will be no further warnings about this issue.<br />libxcb: WARNING! Program tries to lock an already locked connection,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; which indicates a programming error.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; There will be no further warnings about this issue.<br />Oracle Universal Installer, Version 11.1.0.6.0 Production<br />Copyright (C) 1999, 2007, Oracle. All rights reserved.</p>
<p>Если все хорошо, и все тесты пройдены, то откроется графическое приложение Oracle Universal Installer (OUI):<br /><img src="http://www.all-oracle.ru/image.aspx?id=3&amp;size=0" alt="step 1" width="451" height="351" /></p>
<p>Где предлагается выбрать тип установки Basic или Advanced. В базовом типе установки часть опций будет скрыта от пользователя и выставлены по умолчанию. Например, для всех пользователей базы данных будет выставлен единый пароль, опции файловой системы и т.д. При выборе Advanced пользователю предлагается вручную указывать необходимые настройки. Выберем тип Advanced (Продвинутый) и нажимаем кнопку Next (Далее):<br /><img src="http://www.all-oracle.ru/image.aspx?id=4&amp;size=0" alt="Step 2" width="454" height="356" /><br />На втором шаге предлагается указать размещение oraInventory и имя группы операционной системы. В нашем случае это группа oinstall и директория oraInventory - /u01/app/oraInventory. Кнопка Installed Products позволяет просмотреть информацию об установленных продуктах Oracle.<br />Переходим к следующему шагу установки:<br /><img src="http://www.all-oracle.ru/image.aspx?id=5&amp;size=0" alt="Step 3" width="454" height="355" /></p>
<p>На этом шаге предлагается выбрать редакцию Oracle Database Server. На выбор три варианта: Enterprise Edition &ndash; наиболее полная версия с поддержкой Grid, повышенной отказоустойчивостью и т.д. Standart Edition &ndash; предназначена для предприятий среднего размера, рабочих групп и Custom &ndash; позволяет выбрать компоненты по своему выбору. Нажав на кнопку Product Languages можно выбрать доступные языки продукта. Выбираем языки Русский и Английский, редакцию сервера Enterprise Edition и переходим далее. <br /><img src="http://www.all-oracle.ru/image.aspx?id=7&amp;size=0" alt="Step 4" width="455" height="356" /><br />Указываем базовый каталог, имя домашней директории и саму домашнюю директорию. Переходим далее.<br /><img src="http://www.all-oracle.ru/image.aspx?id=8&amp;size=0" alt="Step 5" width="454" height="354" /><br />Здесь производится проверка параметров системы и установленных пакетов. В некоторых случаях тест может пройти с предупреждениями или ошибками. В зависимости от характера, если вы уверены что все в порядке, можно указать, что проверено пользователем (отметить проверку галочкой, и ее статус станет User verified)и продолжить установку. Важно быть точно уверенным, что все в порядке, потому что в дальнейшем ошибки установки могут привести к непредсказуемым последствиям. Если все в порядке переходим далее.<br /><img src="http://www.all-oracle.ru/image.aspx?id=9&amp;size=0" alt="Step 6" width="455" height="356" /><br />На этом этапе установки предлагается выбор, создавать или нет базу данных, если да то настраивать ли ASM, или установить только программное обеспечение и дать возможность пользователю создать БД позже. Выбираем установку только программного обеспечения.<br /><img src="http://www.all-oracle.ru/image.aspx?id=10&amp;size=0" alt="Step 7" width="455" height="355" /><br />Указываем привилегированные группы операционной системы. О них шла речь в начале урока, когда описывалось создание групп и их назначение. Переходим к следующему шагу.<br /><img src="http://www.all-oracle.ru/image.aspx?id=11&amp;size=0" alt="Step 8" width="454" height="355" /><br />Все готово для установки и предоставляется суммарный отчет по продуктам для установки, требуемому пространству и т.д. Если вы со всем согласны и ничего не упустили, то нажимаем Install, после чего начнется копирование файлов.<br /><img src="http://www.all-oracle.ru/image.aspx?id=12&amp;size=0" alt="Step 9" width="454" height="356" /><br />После завершения копирования файлов, будет предложено выполнить два скрипта под пользователем root.<br /><img src="http://www.all-oracle.ru/image.aspx?id=13&amp;size=0" alt="Step 10" width="454" height="356" /><br />Для этого открываем новый терминал и выполняем:</p>
<p class="DOS">oracle@test:~&gt; su -<br />Password:<br />test:~ # cd /u01/app/oraInventory/<br />test:/u01/app/oraInventory # ./orainstRoot.sh<br />Changing permissions of /u01/app/oraInventory to 770.<br />Changing groupname of /u01/app/oraInventory to oinstall.<br />The execution of the script is complete<br />test:/u01/app/oraInventory #</p>
<p>Затем выполняем второй скрипт:</p>
<p class="DOS">test:/u01/app/oraInventory # cd /u01/app/oracle/product/11.1.0/db_1/<br />test:/u01/app/oracle/product/11.1.0/db_1 # ./root.sh<br />Running Oracle 11g root.sh script...<br />The following environment variables are set as:<br />&nbsp;&nbsp;&nbsp; ORACLE_OWNER= oracle<br />&nbsp;&nbsp;&nbsp; ORACLE_HOME=&nbsp; /u01/app/oracle/product/11.1.0/db_1<br />Enter the full pathname of the local bin directory: [/usr/local/bin]:<br />&nbsp;&nbsp; Copying dbhome to /usr/local/bin ...<br />&nbsp;&nbsp; Copying oraenv to /usr/local/bin ...<br />&nbsp;&nbsp; Copying coraenv to /usr/local/bin ...<br />Creating /etc/oratab file...<br />Entries will be added to the /etc/oratab file as needed by<br />Database Configuration Assistant when a database is created<br />Finished running generic part of root.sh script.<br />Now product-specific root actions will be performed.<br />Finished product-specific root actions.</p>
<p>После того как скрипты выполнены возвращаемся к установке, нажимаем ОК и видим финальный экран установки с сообщением об успешном завершении:<br /><img src="http://www.all-oracle.ru/image.aspx?id=15&amp;size=0" alt="Step 11" width="455" height="356" /><br />На этом установка завершена.</p>]]></description><pubDate>2011-10-30 00:00:00</pubDate></item><item><title>Установка и настройка Apache и PHP на Unix</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=79</link><description><![CDATA[<p>Для того чтобы Вы могли разрабатывать и отлаживать PHP скрипты, Вам необходим веб-сервер и связанный с ним интерпретатор PHP. Рассмотрим установку веб-сервера Apache и PHP в среде операционной системы&nbsp;Unix (в частности, Linux и&nbsp;Free&nbsp;BSD).</p>
<p style="color: green;"><strong>Установка Apache на&nbsp;операционные системы семейства Unix</strong></p>
<p>Классически, в&nbsp;Unix программное обеспечение устанавливается путем сборки из&nbsp;исходников:</p>
<p>Скачайте и&nbsp;распакуйте дистрибутив с&nbsp;<a href="http://httpd.apache.org/" target="_blank">httpd.apache.org</a> с&nbsp;помощью браузера типа lynx/links или&nbsp;команды fetch/wget, например:</p>
<p class="highlight">$ fetch http://apache.rin.ru/dist/httpd/apache_1.3.31.tar.gz<br /> $ tar xzf apache_1.3.31.tar.gz</p>
<p>Конфигурируем Apache:</p>
<p class="highlight">$ cd apache_1.3.31<br /> $ ./configure</p>
<p>Для&nbsp;тонкой настройки Apache, следует изучить файл INSTALL (входящий в комплект исходников PHP) и&nbsp;указать необходимые параметры в&nbsp;строке <span style="color: green;">./configure</span>. Впрочем, как&nbsp;правило, настройки по&nbsp;умолчанию вполне подходят.</p>
<p>Скомпилируйте Apache:</p>
<p class="highlight">$ make</p>
<p>Установите Apache:</p>
<p class="highlight">$ su - заходим под суперпользователем (root), если все предыдущие операции производили из-под своего обычного логина)<br /> # make install</p>
<p>На&nbsp;этапе <span style="color: green;">configure</span>, вероятно, вы&nbsp;увидите ошибки, связанные с&nbsp;отсутствием в&nbsp;системе необходимых библиотек. Их&nbsp;необходимо скачать и&nbsp;установить в&nbsp;соответствии с&nbsp;инструкциями, находящимися в&nbsp;файлах INSTALL дистрибутивов (обычно &ndash; это&nbsp;та&nbsp;же последовательность <span style="color: green;">./configure &amp;&amp; make &amp;&amp; make install</span>). Это&nbsp;дело довольно долгое и&nbsp;занудное, посему уже&nbsp;давно большинство Unix-систем включают в&nbsp;себя то&nbsp;или иное более удобное средство установки программного обеспечения.</p>
<p style="color: #003399;"><strong>Установка Apache на FreeBSD<br /></strong></p>
<p><span style="color: green;">Free&nbsp;BSD</span> включает специальное средство для&nbsp;установки программного обеспечения &ndash; порты (ports), представляющие собой набор скриптов, автоматически скачивающих, настраивающих, компилирующих и&nbsp;устанавливающих программные продукты, включая необходимые для&nbsp;запуска библиотеки (dependences &ndash; зависимости). Здесь мы не будем подробно рассматривать, как&nbsp;в&nbsp;Free&nbsp;BSD работать с&nbsp;портами &ndash; это&nbsp;описано в&nbsp;Free&nbsp;BSD Handbook и&nbsp;множестве книг. Предположим, что&nbsp;в&nbsp;вашей системе библиотека портов установлена и&nbsp;обновлена.</p>
<p>Переходим в&nbsp;каталог порта Apache:</p>
<p style="color: #003399;"><strong><br /></strong></p>]]></description><pubDate>2011-10-13 00:00:00</pubDate></item><item><title>Примеры разработки на платформе 8.х</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=70</link><description><![CDATA[<ul>
<li><a href="../article3-70.html#109">Как создать новый документ?</a></li>
<li><a href="../article3-70.html#110">Как найти документ? </a></li>
<li><a href="../article3-70.html#111">Как открыть форму документа?</a></li>
<li><a href="../article3-70.html#112">Как изменить значение реквизита и записать документ? </a></li>
<li><a href="../article3-70.html#113">Как добавить строку в табличную часть документа, имея ссылку на документ?</a></li>
<li><a href="../article3-70.html#114">Как удалить строки из табличной части документа?</a></li>
<li><a href="../article3-70.html#115">Как перебрать строки документа? </a></li>
<li><a href="../article3-70.html#116">Как выгрузить табличную часть документа? </a></li>
<li><a href="../article3-70.html#117">Как посчитать итог в табличной части документа?</a></li>
<li><a href="../article3-70.html#118">Как провести документ? </a></li>
<li><a href="../article3-70.html#119">Как перебрать документы?</a></li>
<li><a href="../article3-70.html#120">Как пометить на удаление все приходные накладные?</a></li>
<li><a href="../article3-70.html#121">Как, имея ссылку на документ, создать в базе его копию?</a></li>
<li><a href="../article3-70.html#122">Как, имея ссылку на документ, прочитать его движения по регистру?</a></li>
<li><a href="../article3-70.html#123">Как определить, по каким регистрам документ выполнил движения?</a></li>
<li><a href="../article3-70.html#124">Как в табличной части документа удалить строки с нулевым значением реквизита "Количество"? </a></li>
<li><a href="../article3-70.html#125">Как очистить колонку "СтавкаНДС" в табличном поле "Товары" уже заполненного документа? </a></li>
<li><a href="../article3-70.html#126">Как заполнить значения свойств нового документа на основании существующего?</a></li>
<li><a href="../article3-70.html#127">Как получить перечень приходных накладных, в которых не заполнены номенклатурные позиции?</a></li>
<li><a href="../article3-70.html#128">Как на дату расходной накладной определить курс валюты управленческого учета? Валюта управленческого учета храниться в периодическом регистре сведений.</a></li>
<li><a href="../article3-70.html#129">Как из формы документа вызвать его неоперативное проведение?</a></li>
<li><a href="../article3-70.html#130">Как в обработке проведения получить остатки, актуальные на позицию документа? </a></li>
<li><a href="../article3-70.html#131">Как определить количество документов и количество разных значений реквизита в таблице записей документа?</a></li>
<li><a href="../article3-70.html#132">В последовательность "ПартионныйУчет" добавлено измерение "Организация". Как теперь получить данные по границам последовательности для каждого значения этого измерения?</a></li>
</ul>
<p>&nbsp;</p>
<h3><a name="109"></a>Как создать новый документ?</h3>
<pre>НовыйДокумент <span class="k">=</span> Документы<span class="k">.</span>ПриходныйКассовыйОрдер<span class="k">.</span>СоздатьДокумент<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
НовыйДокумент<span class="k">.</span>Дата <span class="k">=</span> ТекущаяДата<span class="k">(</span><span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="110"></a>Как найти документ?</h3>
<pre>ИскомыйДокумент <span class="k">=</span> Документы<span class="k">.</span>РеализацияТоваровУслуг<span class="k">.</span>НайтиПоНомеру<span class="k">(</span>НомерДок<span class="k">,</span> Дата<span class="k">(</span><span class="n">2005</span><span class="k">,</span> <span class="n">1</span><span class="k">,</span> <span class="n">1</span><span class="k">)</span><span class="k">)</span><span class="k">;</span> 
<span class="k">Если</span> <span class="k">НЕ</span> ИскомыйДокумент<span class="k">.</span>Пустая<span class="k">(</span><span class="k">)</span> <span class="k">Тогда</span> 
<span class="c">// Выполнить действия в случае обнаружения такого документа. &hellip; </span>
<span class="k">КонецЕсли</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="111"></a>Как открыть форму документа?</h3>
<pre>Форма <span class="k">=</span> ИскомыйДокумент<span class="k">.</span>ПолучитьФорму<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
Форма<span class="k">.</span>Открыть<span class="k">(</span><span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="112"></a>Как изменить значение реквизита и записать документ?</h3>
<pre>ДокОбъект <span class="k">=</span> СсылкаНаДокумент<span class="k">.</span>ПолучитьОбъект<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
ДокОбъект<span class="k">.</span>Ответственный <span class="k">=</span> глТекущийПользователь<span class="k">;</span> 
ДокОбъект<span class="k">.</span>Записать<span class="k">(</span><span class="k">)</span><span class="k">;</span> 

<span class="c">// Запись с проведением документа</span>
ДокОбъект<span class="k">.</span>Записать<span class="k">(</span>РежимЗаписиДокумента<span class="k">.</span>Проведение<span class="k">)</span><span class="k">;</span> 

<span class="c">// Запись с отменой проведения</span>
ДокОбъект<span class="k">.</span>Записать<span class="k">(</span>РежимЗаписиДокумента<span class="k">.</span>ОтменаПроведения<span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="113"></a>Как добавить строку в табличную часть документа, имея ссылку на документ?</h3>
<pre>ОбъектДок <span class="k">=</span> Док<span class="k">.</span>ПолучитьОбъект<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
НоваяСтрока <span class="k">=</span> ОбъектДок<span class="k">.</span>Товары<span class="k">.</span>Добавить<span class="k">(</span><span class="k">)</span><span class="k">;</span> 

<span class="c">// Заполнить значения реквизитов. </span>
НоваяСтрока<span class="k">.</span>Количество <span class="k">=</span> <span class="n">10</span><span class="k">;</span> 
НоваяСтрока<span class="k">.</span>Цена <span class="k">=</span> <span class="n">55</span><span class="k">;</span>  

<span class="c">// Записать документ. </span>
ОбъектДок<span class="k">.</span>Записать<span class="k">(</span><span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="114"></a>Как удалить строки из табличной части документа?</h3>
<pre>ОбъектДокумента <span class="k">=</span> Документ<span class="k">.</span>ПолучитьОбъект<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
ОбъектДокумента<span class="k">.</span>Товары<span class="k">.</span>Очистить<span class="k">(</span><span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="115"></a>Как перебрать строки документа?</h3>
<pre><span class="k">Для</span> <span class="k">Каждого</span> ТекущаяСтрока <span class="k">Из</span> Документ<span class="k">.</span>Товары <span class="k">Цикл</span> 

	<span class="c">// Действия со строкой табличной части. </span>
<span class="k">КонецЦикла</span><span class="k">;</span> 


СтаршийИндекс <span class="k">=</span> Документ<span class="k">.</span>Товары<span class="k">.</span>Количество<span class="k">(</span><span class="k">)</span> <span class="k">-</span> <span class="n">1</span><span class="k">;</span> 
<span class="k">Для</span> Сч <span class="k">=</span> <span class="n">0</span> <span class="k">по</span> СтаршийИндекс <span class="k">Цикл</span> 

	<span class="c">// Действия со строкой табличной части.</span>
<span class="k">КонецЦикла</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="116"></a>Как выгрузить табличную часть документа?</h3>
<pre>ТаблицаТоваровДокумента <span class="k">=</span> Документ<span class="k">.</span>Товары<span class="k">.</span>Выгрузить<span class="k">(</span><span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="117"></a>Как посчитать итог в табличной части документа?</h3>
<pre>ВсегоПоКолонкеСумма <span class="k">=</span> Документ<span class="k">.</span>Товары<span class="k">.</span>Итог<span class="k">(</span><span class="s">"Сумма"</span><span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="118"></a>Как провести документ?</h3>
<pre>НужныйДокументОбъект<span class="k">.</span>Записать<span class="k">(</span>РежимЗаписиДокумента<span class="k">.</span>Проведение<span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="119"></a>Как перебрать документы?</h3>
<pre>ВыборкаДокументов <span class="k">=</span> Документы<span class="k">.</span>Расходная<span class="k">.</span>Выбрать<span class="k">(</span>НачалоГода<span class="k">(</span>ТекущаяДата<span class="k">(</span><span class="k">)</span><span class="k">)</span><span class="k">,</span> КонецГода<span class="k">(</span>ТекущаяДата<span class="k">(</span><span class="k">)</span><span class="k">)</span><span class="k">)</span><span class="k">;</span> 
<span class="k">Пока</span> ВыборкаДокументов<span class="k">.</span>Следующий<span class="k">(</span><span class="k">)</span> <span class="k">Цикл</span> 
	<span class="c">// Действия с документом - элементом выборки, </span>
	<span class="c">// его значение содержится в переменной ВыборкаДокументов </span>
<span class="k">КонецЦикла</span> 


Запрос <span class="k">=</span> <span class="k">Новый</span> Запрос<span class="k">;</span> 
Запрос<span class="k">.</span>Текст <span class="k">=</span> <span class="s">" </span>
<span class="s">|ВЫБРАТЬ </span>
<span class="s">| РеализацияТоваровУслуг.Ссылка </span>
<span class="s">|ИЗ </span>
<span class="s">| Документ. РеализацияТоваровУслуг КАК РеализацияТоваровУслуг </span>
<span class="s">|ГДЕ </span>
<span class="s">| РеализацияТоваровУслуг.Контрагент = &amp;Контрагент </span>
<span class="s">| И </span>
<span class="s">| (РеализацияТоваровУслуг.Номер &lt; 100 | ИЛИ | РеализацияТоваровУслуг.Дата &lt; ДАТАВРЕМЯ(2005, 1, 1)) </span>
<span class="s">| И </span>
<span class="s">| РеализацияТоваровУслуг.Товары.Номенклатура В ИЕРАРХИИ(&amp;Номенклатура)"</span><span class="k">;</span> 

Запрос<span class="k">.</span>УстановитьПараметр<span class="k">(</span><span class="s">"Контрагент"</span><span class="k">,</span> ОтбКонтрагент<span class="k">)</span><span class="k">;</span> 
Запрос<span class="k">.</span>УстановитьПараметр<span class="k">(</span><span class="s">"Номенклатура"</span><span class="k">,</span> ОтбНоменклатура<span class="k">)</span><span class="k">;</span> 

Результат <span class="k">=</span> Запрос<span class="k">.</span><span class="k">Выполнить</span><span class="k">(</span><span class="k">)</span><span class="k">;</span> 
Выборка <span class="k">=</span> Результат<span class="k">.</span>Выбрать<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
<span class="k">Пока</span> Выборка<span class="k">.</span>Следующий<span class="k">(</span><span class="k">)</span> <span class="k">Цикл</span> 
	<span class="c">// действия с документом - элементом выборки, </span>
	<span class="c">// его значение содержится в переменной Выборка </span>
<span class="k">КонецЦикла</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="120"></a>Как пометить на удаление все приходные накладные?</h3>
<pre>ДокументыВида <span class="k">=</span> Документы<span class="k">.</span>ПоступлениеТоваровУслуг<span class="k">.</span>Выбрать<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
<span class="k">Пока</span> ДокументыВида<span class="k">.</span>Следующий<span class="k">(</span><span class="k">)</span> <span class="k">Цикл</span> 
	ДокОбъект <span class="k">=</span> ДокументыВида<span class="k">.</span>ПолучитьОбъект<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
	ДокОбъект<span class="k">.</span>УстановитьПометкуУдаления<span class="k">(</span><span class="k">Истина</span><span class="k">)</span><span class="k">;</span> 
<span class="k">КонецЦикла</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="121"></a>Как, имея ссылку на документ, создать в базе его копию?</h3>
<pre>ДокументКопия <span class="k">=</span> ИсходныйДокумент<span class="k">.</span>Скопировать<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
ДокументКопия<span class="k">.</span>Дата <span class="k">=</span> РабочаяДата<span class="k">;</span> 
ДокументКопия<span class="k">.</span>Записать<span class="k">(</span><span class="k">)</span><span class="k">;</span> 


ДокументКопия<span class="k">.</span>Дата <span class="k">=</span> ИсходныйДокумент<span class="k">.</span>Дата<span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="122"></a>Как, имея ссылку на документ, прочитать его движения по регистру?</h3>
<pre>Запрос <span class="k">=</span> <span class="k">Новый</span> Запрос<span class="k">;</span> 
Запрос<span class="k">.</span>Текст <span class="k">=</span><span class="s">"ВЫБРАТЬ * </span>
<span class="s">|ИЗ </span>
<span class="s">| РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры </span>
<span class="s">|ГДЕ </span>
<span class="s">| ОстаткиНоменклатуры.Регистратор = &amp;Регистратор"</span><span class="k">;</span> 

Запрос<span class="k">.</span>УстановитьПараметр<span class="k">(</span><span class="s">"Регистратор"</span><span class="k">,</span> ПолеВводаРегистратор<span class="k">)</span><span class="k">;</span> 


НаборЗаписейРегистра <span class="k">=</span> Движения<span class="k">.</span>ОстаткиНоменклатуры<span class="k">;</span> 
НаборЗаписейРегистра<span class="k">.</span>Прочитать<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
<span class="k">Для</span> <span class="k">Каждого</span> Запись <span class="k">из</span> НаборЗаписейРегистра <span class="k">Цикл</span> 
	<span class="c">// Чтение и модификация очередного движения. </span>
<span class="k">КонецЦикла</span><span class="k">;</span> 


<span class="k">Для</span> <span class="k">Каждого</span> НаборЗаписейРегистра <span class="k">из</span> Движения <span class="k">Цикл</span> 
	НаборЗаписейРегистра<span class="k">.</span>Прочитать<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
	<span class="k">Для</span> <span class="k">Каждого</span> Запись <span class="k">из</span> НаборЗаписейРегистра <span class="k">Цикл</span> 
		<span class="c">// Чтение и модификация очередного движения. </span>
 	<span class="k">КонецЦикла</span><span class="k">;</span> 
<span class="k">КонецЦикла</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="123"></a>Как определить, по каким регистрам документ выполнил движения?</h3>
<pre>ВЫБРАТЬ ПЕРВЫЕ <span class="n">1</span> 
	<span class="s">"Внутренние заказы"</span> КАК Регистр 
<span class="k">ИЗ</span> 
	РегистрНакопления<span class="k">.</span>ВнутренниеЗаказы КАК ВнутренниеЗаказы 
ГДЕ 
	ВнутренниеЗаказы<span class="k">.</span>Регистратор <span class="k">=</span> &amp;Регистратор 

ОБЪЕДИНИТЬ 

ВЫБРАТЬ ПЕРВЫЕ <span class="n">1</span> 
	<span class="s">"Заказы поставщикам"</span> КАК Регистр 
<span class="k">ИЗ</span> 
	РегистрНакопления<span class="k">.</span>ЗаказыПоставщикам КАК ЗаказыПоставщикам 
ГДЕ 
	ЗаказыПоставщикам<span class="k">.</span>Регистратор <span class="k">=</span> &amp;Регистратор 

ОБЪЕДИНИТЬ 

ВЫБРАТЬ ПЕРВЫЕ <span class="n">1</span> 
	<span class="s">"Размещение заказов покупателей"</span> КАК Регистр 
<span class="k">ИЗ</span> 
	РегистрНакопления<span class="k">.</span>РазмещениеЗаказовПокупателей КАК РазмещениеЗаказовПокупателей 
ГДЕ 
	РазмещениеЗаказовПокупателей<span class="k">.</span>Регистратор <span class="k">=</span> &amp;Регистратор 

ОБЪЕДИНИТЬ 

ВЫБРАТЬ ПЕРВЫЕ <span class="n">1</span> 
	<span class="s">"Товары в резерве на складах"</span> КАК Регистр 
<span class="k">ИЗ</span> 
	РегистрНакопления<span class="k">.</span>ТоварыВРезервеНаСкладах КАК ТоварыВРезервеНаСкладах 
ГДЕ 
	ТоварыВРезервеНаСкладах<span class="k">.</span>Регистратор <span class="k">=</span> &amp;Регистратор
</pre>
<p>&nbsp;</p>
<h3><a name="124"></a>Как в табличной части документа удалить строки с нулевым значением реквизита "Количество"?</h3>
<pre>ОбъектДок <span class="k">=</span> СсылкаДок<span class="k">.</span>ПолучитьОбъект<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
СтруктураДляПоиска <span class="k">=</span> <span class="k">Новый</span> Структура<span class="k">(</span><span class="s">"Количество"</span><span class="k">,</span> <span class="n">0</span><span class="k">)</span><span class="k">;</span> 

ТабличнаяЧастьДок <span class="k">=</span> ОбъектДок<span class="k">.</span>Товары<span class="k">;</span> 
МассивПустыхСтрок <span class="k">=</span> ТабличнаяЧастьДок<span class="k">.</span>НайтиСтроки<span class="k">(</span>СтруктураДляПоиска<span class="k">)</span><span class="k">;</span> 

<span class="k">Для</span> <span class="k">каждого</span> Строка <span class="k">Из</span> МассивПустыхСтрок <span class="k">Цикл</span> 
	ТабличнаяЧастьДок<span class="k">.</span>Удалить<span class="k">(</span>Строка<span class="k">)</span><span class="k">;</span> 
<span class="k">КонецЦикла</span><span class="k">;</span> 

ОбъектДок<span class="k">.</span>Записать<span class="k">(</span><span class="k">)</span><span class="k">;</span> 



СтруктураДляПоиска <span class="k">=</span> <span class="k">Новый</span> Структура<span class="k">(</span><span class="s">"Количество"</span><span class="k">,</span> <span class="n">0</span><span class="k">)</span><span class="k">;</span> 

МассивПустыхСтрок <span class="k">=</span> Товары<span class="k">.</span>НайтиСтроки<span class="k">(</span>СтруктураДляПоиска<span class="k">)</span><span class="k">;</span> 

<span class="k">Для</span> <span class="k">каждого</span> Строка <span class="k">Из</span> МассивПустыхСтрок <span class="k">Цикл</span> 
	Товары<span class="k">.</span>Удалить<span class="k">(</span>Строка<span class="k">)</span><span class="k">;</span> 
<span class="k">КонецЦикла</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="125"></a>Как очистить колонку "СтавкаНДС" в табличном поле "Товары" уже заполненного документа?</h3>
<pre><span class="k">Процедура</span> ТоварыСтавкаНДСПриИзменении<span class="k">(</span>Элемент<span class="k">)</span> 

	<span class="c">// Рассчитать реквизиты табличной части. </span>
	РассчитатьСуммуНДСТабЧасти<span class="k">(</span>ЭлементыФормы<span class="k">.</span>Товары<span class="k">.</span>ТекущиеДанные<span class="k">,</span> ЭтотОбъект<span class="k">)</span><span class="k">;</span> 

<span class="k">КонецПроцедуры</span> <span class="c">// ТоварыСтавкаНДСПриИзменении() </span>



<span class="k">Для</span> <span class="k">Каждого</span> Строка <span class="k">из</span> Товары <span class="k">Цикл</span> 
	Строка<span class="k">.</span>СтавкаНДС <span class="k">=</span> <span class="k">Неопределено</span><span class="k">;</span> 

	<span class="c">// Передать управление на процедуру, вызываемую </span>
	<span class="c">// из обработчика события "ПриИзменении" для поля ввода "СтавкаНДС" </span>
	ЭлементыФормы<span class="k">.</span>Товары<span class="k">.</span>ТекущаяСтрока <span class="k">=</span> Строка<span class="k">;</span> 
	РассчитатьСуммуНДСТабЧасти<span class="k">(</span>ЭлементыФормы<span class="k">.</span>Товары<span class="k">.</span>ТекущиеДанные<span class="k">,</span> ЭтотОбъект<span class="k">)</span><span class="k">;</span> 

<span class="k">КонецЦикла</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="126"></a>Как заполнить значения свойств нового документа на основании существующего?</h3>
<pre>НовыйСчет <span class="k">=</span> Документы<span class="k">.</span>СчетНаОплатуПокупателю<span class="k">.</span>СоздатьДокумент<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
ЗаполнитьЗначенияСвойств<span class="k">(</span>НовыйСчет<span class="k">,</span> ДокументЗаказа<span class="k">,</span> <span class="k">,</span> <span class="s">"Дата"</span><span class="k">)</span><span class="k">;</span> 

<span class="c">// Заполнить табличную часть Товары. </span>
<span class="k">Для</span> <span class="k">Каждого</span> СтрокаТоваровЗаказа <span class="k">Из</span> ДокументЗаказа<span class="k">.</span>Товары <span class="k">Цикл</span> 
	ЗаполнитьЗначенияСвойств<span class="k">(</span>НовыйСчет<span class="k">.</span>Товары<span class="k">.</span>Добавить<span class="k">(</span><span class="k">)</span><span class="k">,</span> СтрокаТоваровЗаказа<span class="k">)</span><span class="k">;</span> 
<span class="k">КонецЦикла</span><span class="k">;</span> 

<span class="c">// Заполнить табличную часть ВозвратнаяТара </span>
<span class="k">Для</span> <span class="k">Каждого</span> СтрокаТарыЗаказа <span class="k">Из</span> ДокументЗаказа<span class="k">.</span>ВозвратнаяТара <span class="k">Цикл</span> 
	ЗаполнитьЗначенияСвойств<span class="k">(</span>НовыйСчет<span class="k">.</span>ВозвратнаяТара<span class="k">.</span>Добавить<span class="k">(</span><span class="k">)</span><span class="k">,</span> СтрокаТарыЗаказа<span class="k">)</span><span class="k">;</span> 
<span class="k">КонецЦикла</span><span class="k">;</span> 

<span class="c">// Заполнить табличную часть Услуги </span>
<span class="k">Для</span> <span class="k">Каждого</span> СтрокаУслугЗаказа <span class="k">Из</span> ДокументЗаказа<span class="k">.</span>Услуги <span class="k">Цикл</span> 
	ЗаполнитьЗначенияСвойств<span class="k">(</span>НовыйСчет<span class="k">.</span>Услуги<span class="k">.</span>Добавить<span class="k">(</span><span class="k">)</span><span class="k">,</span> СтрокаУслугЗаказа<span class="k">)</span><span class="k">;</span> 
<span class="k">КонецЦикла</span><span class="k">;</span> 

НовыйСчет<span class="k">.</span>ЗаказПокупателя <span class="k">=</span> ДокументЗаказа<span class="k">;</span> 

Форма <span class="k">=</span> НовыйСчет<span class="k">.</span>ПолучитьФорму<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
Форма<span class="k">.</span>Открыть<span class="k">(</span><span class="k">)</span><span class="k">;</span> 
</pre>
<p>&nbsp;</p>
<h3><a name="127"></a>Как получить перечень приходных накладных, в которых не заполнены номенклатурные позиции?</h3>
<pre>Запрос <span class="k">=</span> <span class="k">Новый</span> Запрос<span class="k">;</span> 
Запрос<span class="k">.</span>Текст <span class="k">=</span> <span class="s">"ВЫБРАТЬ РАЗЛИЧНЫЕ </span>
<span class="s">| ПриходнаяТовары.Ссылка как Накладные </span>
<span class="s">|ИЗ </span>
<span class="s">| Документ.ПоступлениеТоваровУслуг.Товары КАК ПриходнаяТовары </span>
<span class="s">|ГДЕ </span>
<span class="s">| ПриходнаяТовары.Номенклатура = &amp;ПустаяНоменклатура"</span><span class="k">;</span> 

Запрос<span class="k">.</span>УстановитьПараметр<span class="k">(</span><span class="s">"ПустаяНоменклатура"</span><span class="k">,</span> Справочники<span class="k">.</span>Номенклатура<span class="k">.</span>ПустаяСсылка<span class="k">(</span><span class="k">)</span><span class="k">)</span><span class="k">;</span> 

ТаблицаНакладных <span class="k">=</span> Запрос<span class="k">.</span><span class="k">Выполнить</span><span class="k">(</span><span class="k">)</span><span class="k">;</span>
</pre>
<p>&nbsp;</p>
<h3><a name="128"></a>Как на дату расходной накладной определить курс валюты управленческого учета?</h3>
<pre>ВЫБРАТЬ 
	КурсыВалютСрезПоследних<span class="k">.</span>Валюта КАК ВалютаУпр<span class="k">,</span> 
	КурсыВалютСрезПоследних<span class="k">.</span>Курс КАК КурсУпр 
<span class="k">ИЗ</span> 
	РегистрСведений<span class="k">.</span>КурсыВалют<span class="k">.</span>СрезПоследних<span class="k">(</span>&amp;ДатаДокумента<span class="k">,</span> Валюта В 
									<span class="k">(</span>ВЫБРАТЬ 
										УчетнаяПолитикаСрезПоследних<span class="k">.</span>ВалютаУправленческая 
									<span class="k">ИЗ</span> 
										РегистрСведений<span class="k">.</span>УчетнаяПолитика<span class="k">.</span>СрезПоследних<span class="k">(</span>&amp;ДатаДокумента<span class="k">,</span> <span class="k">)</span> КАК УчетнаяПолитикаСрезПоследних <span class="k">)</span> 
						<span class="k">)</span> КАК КурсыВалютСрезПоследних
</pre>
<p>&nbsp;</p>
<h3><a name="129"></a>Как из формы документа вызвать его неоперативное проведение?</h3>
<pre><span class="k">Процедура</span> ОсновныеДействияФормыОК<span class="k">(</span>Кнопка<span class="k">)</span> 

ЭтаФорма<span class="k">.</span>ИспользоватьРежимПроведения <span class="k">=</span> ИспользованиеРежимаПроведения<span class="k">.</span>Неоперативный<span class="k">;</span> 
ЗаписатьВФорме<span class="k">(</span>РежимЗаписиДокумента<span class="k">.</span>Проведение<span class="k">)</span><span class="k">;</span> 
Закрыть<span class="k">(</span><span class="k">)</span><span class="k">;</span> 

<span class="k">КонецПроцедуры</span>
</pre>
<p>&nbsp;</p>
<h3><a name="130"></a>Как в обработке проведения получить остатки, актуальные на позицию документа?</h3>
<pre>Запрос<span class="k">.</span>Текст <span class="k">=</span> <span class="s">" ВЫБРАТЬ </span>
<span class="s">| ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток, </span>
<span class="s">| ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток </span>
<span class="s">|ИЗ </span>
<span class="s">| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&amp;ПараметрПериод, </span>
<span class="s">| ДоговорКонтрагента = &amp;Договор </span>
<span class="s">| И </span>
<span class="s">| Сделка =&amp;Сделка) КАК ВзаиморасчетыСКонтрагентамиОстатки"</span><span class="k">;</span> 

Запрос<span class="k">.</span>УстановитьПараметр<span class="k">(</span><span class="s">"ПараметрПериод"</span><span class="k">,</span> МоментВремени<span class="k">(</span><span class="k">)</span><span class="k">)</span><span class="k">;</span> 
</pre>
<p>&nbsp;</p>
<h3><a name="131"></a>Как определить количество документов и количество разных значений реквизита в таблице записей документа?</h3>
<pre>ВЫБРАТЬ 
	КОЛИЧЕСТВО<span class="k">(</span>РегистрацияПростоевВОрганизации<span class="k">.</span>Ссылка<span class="k">)</span> КАК Случаев<span class="k">,</span> 
	КОЛИЧЕСТВО<span class="k">(</span>РАЗЛИЧНЫЕ РегистрацияПростоевВОрганизации<span class="k">.</span>ФизЛицо<span class="k">)</span> КАК Работников 
<span class="k">ИЗ</span> 
	Документ<span class="k">.</span>РегистрацияПростоевВОрганизации КАК РегистрацияПростоевВОрганизации 
ГДЕ 
	РегистрацияПростоевВОрганизации<span class="k">.</span>Проведен 
</pre>
<p>&nbsp;</p>
<h3><a name="132"></a>В последовательность "ПартионныйУчет" добавлено измерение "Организация". Как теперь получить данные по границам последовательности для каждого значения этого измерения?</h3>
<pre>ТаблицаГраниц <span class="k">=</span> Последовательности<span class="k">.</span>ПартионныйУчет<span class="k">.</span>ПолучитьГраницы<span class="k">(</span><span class="s">"Организация"</span><span class="k">)</span><span class="k">;</span> 
<span class="k">Для</span> <span class="k">Каждого</span> СтрокаТаблицыГраниц <span class="k">Из</span> ТаблицаГраниц <span class="k">Цикл</span> 
	Организация <span class="k">=</span> СтрокаТаблицыГраниц<span class="k">.</span>Организация<span class="k">;</span> 
	ДатаГП <span class="k">=</span> СтрокаТаблицыГраниц<span class="k">.</span>Граница<span class="k">.</span>Дата<span class="k">;</span> 
	СсылкаГП <span class="k">=</span> СтрокаТаблицыГраниц<span class="k">.</span>Граница<span class="k">.</span>Ссылка<span class="k">;</span> 
<span class="k">КонецЦикла</span><span class="k">;</span>
</pre>]]></description><pubDate>2011-10-08 00:00:00</pubDate></item><item><title>Влияет ли кнопка +1 на позиции сайта в выдаче Google (эксперимент)</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=69</link><description><![CDATA[<p><ins id="aswift_0_anchor" style="display: block; height: 60px; margin: 0pt; padding: 0pt; position: relative; visibility: visible; width: 468px;"></ins> </p>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">&nbsp;</div>
<p><img src="http://optimizatorsha.ru/google-plus-one.jpg" alt="" align="left" />В апреле 2011 специалисты компании <a href="http://seoeffect.com/">SEOEffect Tools</a> решили поставить <strong>эксперимент с целью проследить влияние кнопки Google +1 на позиции сайта</strong>. Эксперимент стартовал 4 апреля &ndash; практически через 4 дня после того, как компания Google объявила о появлении кнопки &laquo;+1&raquo; в экспериментальном режиме.</p>
<p>Когда я наткнулась на эксперимент, мне сразу захотелось перевести его дословно и выложить на блоге. Прочитав весь текст (30 страниц), я поняла, что этого делать не стоит &ndash; оказывается, наши забугорные коллеги по количеству воды в публикациях могут переплюнуть даже самых красноречивых российских блоггеров. Но эксперимент, тем не менее, все равно показался мне интересным и стоящим внимания читателей, так что изложу у себя его основную суть. Свои аннотации (их не так много) буду выделять курсивом, что б не запутать вас, где описание эксперимента авторами, а где &ndash; мои рассуждения. Скачать оригинальное описание эксперимента можно на сайте <a href="http://www.seoeffect.com/blog/Effects-of-the-Google-%2B1-button-researched-download-the-whitepaper/">SEOEffect</a>. Если Вы вообще не понимаете, о чем речь, тогда сначала прочитайте, что такое <a href="http://www.optimizatorsha.ru/google/plus-one-button/"><strong>кнопка Google +1</strong></a> у меня и о том, <a href="http://shakin.ru/google/google-plus-one-button.html"><strong>как добавить кнопку Google +1 на свой сайт</strong></a> у Глобатора.</p>
<h2>Краткое описание эксперимента</h2>
<p>Компания SeoEffect Tools попросила своих читателей &laquo;проголосовать&raquo; за три страницы в поисковых результатах Google и сообщить об этом действии через твиттер (ретвитнуть). На просьбу откликнулось 72 читателя, авторы эксперимента проследили влияние их действий на позиции, трафик и видимость страниц.</p>
<p><strong>В результате были сделаны такие выводы: </strong><br /> 1. Наличие &laquo;голосов&raquo; повышает видимость сайта в поиске для пользователей, которые за него &laquo;голосовали&raquo; и для их социального круга. <em>Если вы &laquo;проголосуете&raquo; за сайт, который находится на 9-м месте, то в следующий раз по этому же запросу вы увидите его выше &ndash; например, на 5-7 позициях. Если за него проголосуют также ваши знакомые, для вас и для них он будет показываться еще выше (Топ 1, Топ 3) </em>.</p>
<p>2. Наличие &ldquo;голосов&rdquo; повышает СTR сайта в выдаче. Социальные рекомендации от людей, которых вы лично знаете (вашего социального круга) зачастую являются более убедительные, чем советы экспертов. Кроме того, <strong>наличие &ldquo;голосов&rdquo; возле тайтла в выдаче привлекает внимание к сайту и делает его более кликабельным в результатах выдачи.</strong></p>
<p><em>Эти выводы в оригинальном описании эксперимента повторяются четыре раза в различных формулировках. Думаю, что их суть дойдет до моих читателей и с первого раза. </em></p>
<h2>Постановка эксперимента</h2>
<p>Эксперимент стартовал 4 апреля, в нем &laquo;учавствовали&raquo; три страницы сайта компании:</p>
<p>-http://www.seoeffect.com/<br /> -http://www.seoeffect.com/demo-and-specs/keyword-research-tool.php<br /> -http://www.seoeffect.com/blog/Participate-in-the-SEO-Effect-Google-plus1-button-experiment-/</p>
<p>Авторы исследования через рассылку, FB и Твиттер призвали своих читателей присоединиться к эксперименту. Желающие должны были ознакомиться с <a href="http://www.seoeffect.com/blog/Participate-in-the-SEO-Effect-Google-plus1-button-experiment-/">детальной инструкцией участника</a> и подтвердить свое участие через Твиттер. Предполагалось набрать минимум 50 участников.</p>
<p>С самого начала экспериментаторы натолкнулись на трудности &ndash; оказалось, что некоторым пользователям кнопка &laquo;+1&raquo; не показывается, даже если они залогинились в социальный профайл и присоединились к эксперименту на сайте Google. Также кнопка не работала в браузере Opera и т.д.</p>
<p>Экспериментаторы оценивали влияние кнопки &laquo;+1&raquo; на показы, CTR, позиции в выдаче и долю трафика из поиска по определенным ключевым словам.</p>
<h2>Влияние &ldquo;голосов&rdquo; на результаты поиска</h2>
<p>Так выглядел сайт вначале эксперимента (1 день). Метка &laquo;You shared this&raquo; &ndash; это аннотация GoogleBuzz.</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/01.jpg"><img class="aligncenter size-medium wp-image-2090" title="01" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/01-300x96.jpg" alt="" width="300" height="96" /></a></center>
<p><br />Сайт компани SEOEffect в результатах поиска после того, как на кнопку &laquo;+1&raquo; нажали 10 участников эксперимента:</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/02.jpg"><img class="aligncenter size-medium wp-image-2091" title="02" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/02-300x174.jpg" alt="" width="300" height="174" /></a></center>
<p><em>Перевод оранжевых сносок:</em><br /> &ndash; <strong>URL 1</strong>: профили пользователей не отображаются со своим &laquo;голосами&raquo; для этого URL &ndash; социальный статус заимствуется с Твиттера;<br /> &ndash; <strong>URL 2</strong>: рядом с &laquo;голосами&raquo; отображаются профили 3-х проголосовавших пользователей;<br /> &ndash; <strong>URL 3</strong>: рядом с &laquo;голосами&raquo; отображается профили 3-х других пользователей.</p>
<p><br />После того, как на кнопку &ldquo;+1&Prime; нажали 25 пользователей, ничего не поменялось&hellip;</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/03.jpg"><img class="aligncenter size-medium wp-image-2092" title="03" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/03-300x160.jpg" alt="" width="300" height="160" /></a></center>
<p><br />После того, как &laquo;проголосовали&raquo; 29 участников, экспериментальный URL по запросу &laquo;Seo Effect&raquo; был выброшен с первой тройки результатов и стал появляться только в &laquo;Других результатах&raquo; с четырьмя &laquo;голосами&raquo; (<em>Google пронюхал накрутку?</em>).</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/04.jpg"><img class="aligncenter size-medium wp-image-2093" title="04" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/04-300x257.jpg" alt="" width="300" height="257" /></a></center>
<p><br />После того, как набралось 29 &laquo;голосов&raquo; по запросу &laquo;keyword research tool&raquo;, сайт появился внизу первой страницы. Экспериментаторы считают, что это связано не с &laquo;голосами&raquo;, а с появлением ссылки в Google Buzz. Количество &laquo;проголосовавших&raquo; возле URL не показывается.</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/05.jpg"><img class="aligncenter size-medium wp-image-2094" title="05" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/05-238x300.jpg" alt="" width="238" height="300" /></a></center>
<p><br />После того, как количество &laquo;голосов&raquo; достигло 40 (запрос &laquo;seo effect&raquo;), Google обнулил результаты для трех экспериментальных урлов, &laquo;голоса&raquo; возле них в выдаче перестали показываться вообще (<em>доигрались</em>). Возле нескольких других страниц все еще показывается кнопка +1.</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/06.jpg"><img class="aligncenter size-medium wp-image-2095" title="06" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/06-223x300.jpg" alt="" width="223" height="300" /></a></center>
<p><br />60 &laquo;голосов&raquo;, третий день эксперимента. По запросу &laquo;keyword research tool&raquo; сайт по-прежнему показывается внизу первой страницы в результате упоминания в Google Buzz. Количество &laquo;+1&raquo;, похоже, не имеют никакого влияния, хотя возле некоторых страниц в поиске они отображаются (см. GoogleAdwords Tool &ndash; Топ1 результатов поиска).</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/07.jpg"><img class="aligncenter size-medium wp-image-2096" title="07" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/07-246x300.jpg" alt="" width="246" height="300" /></a></center>
<p><br />Когда набралось 60 &laquo;голосов&raquo; для запроса &laquo;seo effect&raquo;, сайт вернулся по этому запросу на 1 место. Но в аннотации возле кнопки &laquo;+1&raquo; упоминаются только 4 из 60 проголосовавших.</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/08.jpg"><img class="aligncenter size-medium wp-image-2097" title="08" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/08-300x61.jpg" alt="" width="300" height="61" /></a></center>
<p><br />Интересный момент &ndash; авторы эксперимента обратили внимание, что, например, по запросу &laquo;Google +1&raquo; кнопка Google не показывается ни у одного сайта, что несколько странно:<br /> Рис 25.</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/09.jpg"><img class="aligncenter size-medium wp-image-2098" title="09" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/09-300x179.jpg" alt="" width="300" height="179" /></a></center>
<p><br /><br /></p>
<h2>Как +1 влияет на CTR в выдаче</h2>
<p>Чтоб обойти ограничение персональным поиском, экспериментаторы смотрели на показатель по количеству страниц в Инструментах Вебмастера. Там показывается средняя позиция для ключевых слов и страниц за определенный период времени (максимум &ndash; последние 30 дней) .</p>
<p>На рисунке ниже &ndash; результаты по Google WebmasterTools на протяжении 30 дней от старта эксперимента. Увеличение показов и CTR в результатах поиска для сайта SEOEffect оказалось не долгосрочным:</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/10.jpg"><img class="aligncenter size-medium wp-image-2099" title="10" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/10-300x110.jpg" alt="" width="300" height="110" /></a></center>
<p><br /><br /></p>
<h2>До и после: результаты эксперимента</h2>
<p>Сравнив показатели до и после эксперимента, его организаторы заметили следующее:<br /> &ndash; количество показов главной страницы сайта SEOEffect не увеличилось, зато средняя позиция по ключевым словам повысилась на 24%;<br /> &ndash; страница про анализ ключевых слов получила больше кликов и ее средняя позиция выросла на 20%;<br /> &ndash; публикация на блоге также получила больше трафика, но это объясняется скорее всего естественным интересом пользователей. <em>Поскольку эксперимент Google был анонсирован всего на несколько дней раньше, это вполне объясняет тот факт, что люди как раз начали искать информацию о нем.</em></p>
<p>На рисунке внизу показано, как отличались показатели для сайта SEOEffect.com до и после эксперимента. Средняя позиция для всех ключевых слов поднялась на 20%:</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/11.jpg"><img class="aligncenter size-medium wp-image-2100" title="11" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/11-300x87.jpg" alt="" width="300" height="87" /></a></center>
<p><br /><br /></p>
<h2>Доля трафика</h2>
<p>Авторы эксперимента отмечают, что доля трафика из поиска для трех экспериментальных страниц поднялась на 3%,общая доля трафика выросла на 2%. Они считают, что рост связан непосредственно с экспериментом, <em>но на это могут быть и другие причины (например, интерес пользователей к самому эксперименту)</em>.</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/12.jpg"><img class="aligncenter size-medium wp-image-2101" title="12" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/12-300x214.jpg" alt="" width="300" height="214" /></a></center>
<p><br /><br /></p>
<h2>Кнопка Google +1 и 301 редирект</h2>
<p>В самом начале авторы заметили, что URL одной из экспериментальных страниц совсем не ЧПУ (человекопонятный) и это вдохновило их на еще один эксперимент. После того, как у страницы с плохим URL появились первые &laquo;голоса&raquo;, авторы поменяли URL, поставив со старого URL 301 редирект на новый. Как только новый URL проиндексировался, &laquo;голоса&raquo; в выдаче возле этой страницы перестали показываться. Это значит, что &laquo;+1&raquo; не передаются с помощью 301 редиректа. Возможно, это специально предусмотрено разработчиками, что б не было злоупотреблений вебматерами (что б не перекидывали &laquo;голоса&raquo; на левые страницы, за которые пользователи никогда бы не проголосовали).</p>
<p>На картинке &ndash; 2 урла. Первый &ndash; действующий, без &ldquo;голосов&rdquo;. Второй -старый, с которого стоит 301 редирект на действующий. Возле второго все еще присутствует кнопка с &ldquo;голосами&rdquo;:</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/13.jpg"><img class="aligncenter size-medium wp-image-2103" title="13" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/13-300x104.jpg" alt="" width="300" height="104" /></a></center>
<p><br />Через 5 дней: в выдаче остался только действующий URL, &ldquo;голоса&rdquo; не передались:</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/14.jpg"><img class="aligncenter size-medium wp-image-2104" title="14" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/14-300x84.jpg" alt="" width="300" height="84" /></a></center>
<p><br /><br /></p>
<h2>Почему эксперимент не может быть &ldquo;чистым&rdquo;</h2>
<p>Далее авторы перечисляю факторы, из-за которых получить чистые данные по влиянию кнопки &laquo;+1&raquo; невозможно:<br /> &ndash; <strong>сезонные колебания и погода</strong> (<em>вообще странное замечание конечно, учитывая ключевые слова, упоминавшиеся в эксперименте&hellip; Не могу представить, что б интерес к запросам &laquo;seo effect&raquo; или &laquo;keywords research tool&raquo; менялся во время дождя</em>);<br /> &ndash; <strong>распространение информации об эксперименте через Твиттер</strong> (ссылки с Твиттера также могли повлиять на результат);<br /> &ndash; <strong>слишком быстрая накрутка &laquo;голосов&raquo;</strong> &ndash; большинство из них были набраны в течении первых 48 часов от момента старта эксперимента. Google мог посчитать это накруткой и не учитывать &laquo;голоса&raquo; (<em>я тоже склоняюсь к этому варианту, кстати</em>);<br /> &ndash; <strong>географические отличия</strong> &ndash; большинство голосовавших находились в Голландии, а там вообще в выдаче вместо кнопки +1 показываются звездочки. Возможно, алгоритм учета &laquo;голосов&raquo; там тоже отличается от того, который действует в международном поиске.</p>
<p>Вот как &ldquo;голоса&rdquo; выглядят в голландском поиске Google:</p>
<center><a href="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/15.jpg"><img class="aligncenter size-medium wp-image-2105" title="15" src="http://www.optimizatorsha.ru/wp-content/uploads/2011/06/15-300x98.jpg" alt="" width="300" height="98" /></a></center>
<h2>Заключение и выводы</h2>
<p>Из-за большого количества искажающих факторов в результате эксперимента появилось еще больше вопросов, чем было до него. Тем не менее, авторы озвучили такие предварительные выводы:<br /> <strong>1. Позиции сайта увеличились</strong> в среднем на 20%, <strong>увеличился CTR</strong> и посещаемость сайта из поиска.<br /> <strong>2. &laquo;Голоса&raquo; положительно сказались на количестве показов сайта в результатах выдачи</strong>, потому что они повышают страницу в выдаче для как для самих &laquo;проголосовавших&raquo;, так и для пользователей из их социального круга.<br /> <strong> 3.</strong> &laquo;Голоса&raquo; привлекают внимание к странице в поиске и <strong>делают ее более заметной.</strong><br /> <strong>4.</strong> URL страниц, отмеченных &laquo;+1&raquo;, в локальных поисках других стран отмечаются значком &laquo;+1&raquo;, а значком звезды.<br /> <strong>5.</strong> Google постоянно обнуляет информацию о &laquo;голосах&raquo;, либо их влияние со временем ухудшается (а я думаю что ни то, ни другое, просто из-за такой быстрой накрутки их влияние просто не учитывалось).<br /> <strong>6.</strong> В поисковых результатах никогда не показывается <strong>более 3 профилей проголосовавших.</strong><br /> <strong>7.</strong> В ходе эксперимента ни разу не показывалось общее количество проголосовавших <strong>более 4-х</strong>, хотя на самом деле для каждого URL их было более 60.<br /> <strong>8. 301 редирект не передает информацию о &laquo;голосах&raquo;. </strong>Если URL страницы, за которую голосовал, сменить на другой с использованием 301 редиректа, голоса теряются.<br /> Конец эксперимента.</p>
<p><span style="text-decoration: underline;">Позволю себе высказать свое мнение про сам эксперимент и его результаты:</span><br /> <strong>1) Компания SEOEffect Tools запустила эксперимент слишком рано.</strong> Работа кнопки &laquo;+1&raquo; еще не была налажена самими разработчиками, с 31 марта по 2 июня она работала в экспериментальном режиме. Это не могло не сказаться на результатах &ndash; думаю, если такой эксперимент повторить сейчас, результаты будут несколько иными.</p>
<p><strong>2) Промежуток времени, в течении которого набирались голоса, был слишком мал.</strong> Не думаю, что Google запустил бы новую фичу, которую так легко накрутить, без антифрод-фильтра. Очевидно, что 60 голосов (большая часть которых принадлежала жителям одного региона) за 2 дня Google мог посчитать накруткой и просто не учитывать их.</p>
<p><strong>3) Выборка страниц для эксперимента была слишком узкой.</strong> Сложно строить выводы на 3-х страницах одного сайта. Для такого эксперимента лучше всего брать пару десятков сайтов разных тематик и несколько запросов разного типа.</p>
<p><strong>4) Сам эксперимент был продуман не до конца.</strong> Непонятно, зачем было дублировать &laquo;голоса&raquo; ретвитами, если авторы сами понимали, что это может исказить результат. Не ставилась задача проанализировать качество голосов (профили проголосовавших), в учет бралось только количество. Не было предусмотрено распределение голосов по времени и географии. В общем, есть много &laquo;но&raquo;.</p>
<p>Авторы эксперимента сами понимают, что полученный результат далек от идеала и вроде как планируют провести новое исследование. Мы же будем ждать появления кнопки &laquo;+1&raquo; в российской выдаче и готовиться к собственным экспериментам.</p>]]></description><pubDate>2011-10-07 00:00:00</pubDate></item><item><title>Преобразование http-ссылок с помощью Apache</title><link><![CDATA[http://www.group-business.ru/index.php?action=ViewArticle&id]]>=67</link><description><![CDATA[<h2>По вопросам преобразования ссылок просьба обращаться к&nbsp;Apache</h2>
<h3>преобразование http-ссылок с&nbsp;помощью Apache</h3>
<table align="left">
<tbody>
<tr>
<td class="text_picture" align="center"><img src="http://hostinfo.ru/ill/030916rewrite3.jpg" alt="" width="200" height="146" border="1" /></td>
</tr>
</tbody>
</table>
<p>Допустим, у&nbsp;вас есть работающий веб-сайт, состоящий из&nbsp;большого количества статических html-страниц. Все идет хорошо, но вдруг в&nbsp;какой-то момент вы решаете усовершенствовать работу веб-сайта и&nbsp;добавляете динамические скрипты: в&nbsp;результате страничка новостей теперь доступна по&nbsp;ссылке <em>http://www.site.com/cgi-bin/news.cgi</em> вместо прежней <em>http://www.site.com/news.html</em>, а&nbsp;каталог, в&nbsp;котором хранились страницы с&nbsp;описанием российских регионов, полностью перекочевал в&nbsp;динамику, и&nbsp;наш горячо любимый 77-й регион теперь доступен по&nbsp;неэстетично выглядящей ссылке <em>http://site.ru/cgi-bin/regions.pl?region=77&amp;mode=brief</em> вместо легко запоминаемой <em>http://site.ru/regions/77.html</em>.</p>
<p>Подобные изменения требуют замены соответствующих ссылок на&nbsp;всех страницах вашего веб-сайта, которые ссылаются на&nbsp;новости и&nbsp;регионы, но это еще цветочки. Основная проблема заключается в&nbsp;том, что на&nbsp;эти страницы могут ссылаться другие веб-сайты, о&nbsp;существовании которых вы даже не&nbsp;подозреваете. Да и&nbsp;посетители вашего веб-сайта могли создать соответствующие закладки в&nbsp;своих браузерах, и&nbsp;поэтому они будут неприятно удивлены, когда вместо странички новостей получат ошибку &laquo;страница не&nbsp;найдена&raquo;.</p>
<div class="note-r">Модуль mod_rewrite веб-сервера Apache&nbsp;&mdash; это мощнейшее средство преобразования http-ссылок</div>
<p>Анализ проблемы наводит на&nbsp;мысль о&nbsp;том, как хорошо было бы иметь возможность обращаться к&nbsp;одним и&nbsp;тем же страницам по&nbsp;различным http-ссылкам, причем для страниц с&nbsp;похожими ссылками было бы очень удобно описать одно общее для них правило вместо того, чтобы для каждой страницы выписывать все возможные варианты ведущих на&nbsp;нее http-ссылок. Если ваш веб-сайт работает под&nbsp;управлением весьма популярного в&nbsp;настоящее время веб-сервера<a><sup>*</sup></a> <a href="http://httpd.apache.org/">Apache</a> (скорее всего, это именно так), то&nbsp;в&nbsp;вашем распоряжении есть мощнейшее средство преобразования http-ссылок, которое реализуется специальным программным модулем <strong>mod_rewrite</strong>. Некоторые директивы данного модуля могут использоваться только в&nbsp;конфигурационном файле самого веб-сервера, другие же&nbsp;&mdash; в&nbsp;специальных файлах <strong>.htaccess</strong>, которые можно располагать в&nbsp;подкаталогах иерархии вашего веб-сайта. Именно эти директивы из&nbsp;<strong>.htaccess</strong>и&nbsp;производят основную работу по&nbsp;преобразованию http-ссылок, поэтому их мы опишем более подробно.</p>
<p>Для перестраховки можно уточнить у&nbsp;службы технической поддержки вашего хостера, включен ли модуль <strong>mod_rewrite</strong> в&nbsp;состав веб-сервера, обслуживающего ваш веб-сайт, и&nbsp;допускается ли использование его директив в&nbsp;файлах <strong>.htaccess</strong>. Поскольку данный модуль широко используется во многих проектах, каждый уважающий себя хостер на&nbsp;оба ваших вопроса ответит: &laquo;Да, конечно&raquo;. Если же вы получили отрицательный ответ, это хороший повод задуматься о&nbsp;смене хостинг-провайдера на&nbsp;другого, предоставляющего более качественные услуги.</p>
<p>Прежде чем углубиться в&nbsp;описание возможностей модуля <strong>mod_rewrite</strong>, приведем пример решения двух описанных выше проблем:</p>
<p><em># Включение преобразования ссылок<br /> RewriteEngine on<br /> <br /> # Новостная страница<br /> RewriteRule ^news.html$ /cgi-bin/news.cgi<br /> <br /> # Страницы с&nbsp;описаниями регионов<br /> RewriteRule ^regions/([0-9]+).html$ /cgi-bin/regions.pl?region=$1&amp;mode=brief<br /></em></p>
<div class="note-r">Директива RewriteEngine включает или выключает преобразование http-ссылок</div>
<p>Директива <strong>RewriteEngine</strong> включает или выключает преобразование http-ссылок (соответственно "<strong>RewriteEngine on</strong>&laquo; или &raquo;<strong>RewriteEngine off</strong>"). Действие директивы распространяется на&nbsp;текущий каталог и&nbsp;на все его подкаталоги, в&nbsp;которых нет своих файлов <strong>.htaccess</strong>с&nbsp;данной директивой.</p>
<p>Правила преобразования ссылок наследуются чуть сложнее. Чаще всего преобразование по&nbsp;умолчанию отключено в&nbsp;основном конфигурационном файле веб-сервера. Допустим, что вы записали в&nbsp;<strong>.htaccess</strong> некоего каталога директиву "<strong>RewriteEngine on</strong>" и&nbsp;некоторое количество правил преобразования. Перейдем теперь в&nbsp;один из&nbsp;подкаталогов.</p>
<ul>
<li>Если здесь нет файла <strong>.htaccess</strong>, либо в&nbsp;нем нет ни&nbsp;одной директивы модуля <strong>mod_rewrite</strong>, то&nbsp;все правила преобразования наследуются от&nbsp;родительского каталога.</li>
<li>Если в&nbsp;файле <strong>.htaccess</strong> есть хотя бы одна директива модуля <strong>mod_rewrite</strong>, то&nbsp;не наследуется ничего, а&nbsp;состояние по&nbsp;умолчанию выставляется таким же, как в&nbsp;главном конфигурационном файле веб-сервера (по умолчанию "<strong>off</strong>"). Поэтому, если вы желаете иметь в&nbsp;этом каталоге свой набор правил преобразования, не&nbsp;забудьте добавить директиву "<strong>RewriteEngine on</strong>".</li>
<li>Есть и&nbsp;третий вариант. Допустим, вы желаете унаследовать все правила из&nbsp;родительского каталога и&nbsp;добавить к&nbsp;ним несколько новых&nbsp;&mdash; для этого вам понадобится директива <strong>RewriteOptions</strong>, которая допускает только один фиксированный аргумент. Таким образом, в&nbsp;файл <strong>.htaccess</strong> вы должны записать ваши новые правила и&nbsp;две директивы: "<strong>RewriteEngine on</strong>&laquo; и&nbsp;&raquo;<strong>RewriteOptions inherit</strong>".</li>
</ul>
<table align="right">
<tbody>
<tr>
<td class="text_picture" align="center"><img src="http://hostinfo.ru/ill/030916rewrite2.jpg" alt="" width="200" height="129" border="1" /></td>
</tr>
</tbody>
</table>
<p>А теперь перейдем непосредственно к&nbsp;описанию правил. Преобразования описываются при помощи директивы <strong>RewriteRule</strong>. Правил может быть несколько, при этом все они применяются в&nbsp;порядке их описания. Когда правила заканчиваются, они вновь начинают применяться с&nbsp;самого начала, и&nbsp;этот цикл продолжается до тех пор, пока &laquo;срабатывает&raquo; хотя бы одно из&nbsp;правил. В&nbsp;некоторых случаях это может приводить к&nbsp;зацикливанию, поэтому при описании правил нужно быть предельно внимательным. Существует несколько специальных флагов, которые предоставляют возможность прервать этот процесс на&nbsp;определенном правиле или пропустить несколько правил (об этом будет рассказано ниже). Синтаксис директивы <strong>RewriteRule</strong> выглядит следующим образом:</p>
<p><em>RewriteRule &laquo;исходный путь&raquo; &laquo;замена&raquo; &laquo;флаги&raquo;</em></p>
<div class="note-r">Директивы RewriteRule описывают правила преобразования ссылок</div>
<p><em>Исходный путь</em>&nbsp;&mdash; это часть исходной ссылки, от&nbsp;которой отрезаны имя сервера, путь до текущего каталога и&nbsp;параметры запроса. Допустим, что ваш веб-сайт <em>www.site.com</em> расположен в&nbsp;каталоге <em>/home/site/www</em>. Тогда для ссылки <em>http://www.site.com/test/list.html?mode=0</em> исходным путем в&nbsp;каталоге <em>/home/site/www</em> будет <em>test/list.html</em>, а&nbsp;в каталоге <em>/home/site/www/test</em>&nbsp;&mdash; <em>list.html</em>. Исходный путь задается регулярным выражением (синтаксис регулярных выражений Apache подробно описан в&nbsp;статье "<a href="http://hostinfo.ru/tree/hosting/web/site/building/technology/htaccess">Маленькие настройки большого веб-сервера</a>"). Символ <strong>!</strong> перед исходным путем означает, что правило &laquo;срабатывает&raquo; по&nbsp;<em>несовпадению</em>ссылки с&nbsp;заданным регулярным выражением.</p>
<p><em>Замена</em>&nbsp;&mdash; это то, на&nbsp;что будет заменена исходная ссылка в&nbsp;случае &laquo;срабатывания&raquo; правила. Замена может быть относительной (если она не&nbsp;начинается с&nbsp;символа <strong>/</strong>) и&nbsp;абсолютной (если она начинается с&nbsp;символа <strong>/</strong> или представляет собой полную ссылку, начинающуюся с&nbsp;<em>http://</em> или <em>https://</em>). В&nbsp;замене можно использовать определенные части исходного пути, отмеченные круглыми скобками. При этом макрос <strong>$1</strong> обозначает ту часть исходного пути, которая расположена внутри первой пары скобок, <strong>$2</strong>&nbsp;&mdash; внутри второй пары и&nbsp;так далее.</p>
<p><em>Флаги</em>&nbsp;&mdash; это дополнительные опции для данного правила, которые перечисляются в&nbsp;квадратных скобках через запятую.</p>
<ul>
<li><strong>R</strong> (<em>redirect</em>) останавливает процесс преобразования и&nbsp;возвращает результат браузеру клиента как редирект на&nbsp;данную страницу (<strong>302</strong>, <em>MOVED TEMPORARY</em>). С&nbsp;данным флагом можно указать другой код результата, например "<strong>R=301</strong>" возвратит редирект с&nbsp;кодом <strong>301</strong> (<em>MOVED PERMANENTLY</em>).</li>
<li><strong>F</strong> (<em>forbidden</em>) возвращает ошибку <strong>403</strong> (<em>FORBIDDEN</em>).</li>
<li><strong>G</strong> (<em>gone</em>) возвращает ошибку <strong>410</strong> (<em>GONE</em>).</li>
<li><strong>P</strong> (<em>proxy</em>)&nbsp;&mdash; по&nbsp;этому флагу <strong>Apache</strong> выполняет подзапрос (<em>sub-request</em>) к&nbsp;указанной странице с&nbsp;использованием программного модуля <strong>mod_proxy</strong>, при этом пользователь ничего не&nbsp;узнает об&nbsp;этом подзапросе. Если модуль <strong>mod_proxy</strong> не&nbsp;входит в&nbsp;состав вашей сборки <strong>Apache</strong>, то&nbsp;применение данного флага вызовет ошибку.</li>
<li><strong>L</strong> (<em>last</em>) останавливает процесс преобразования, и&nbsp;текущая ссылка считается окончательной.</li>
<li><strong>N</strong> (<em>next</em>) запускает процесс преобразования с&nbsp;первого по&nbsp;порядку правила.</li>
<li><strong>C</strong> (<em>chain</em>) объединяет несколько правил в&nbsp;цепочку. Если первое правило цепочки &laquo;не срабатывает&raquo;, то&nbsp;вся цепочка игнорируется.</li>
<li><strong>NS</strong> (<em>nosubreq</em>) разрешает &laquo;срабатывание&raquo; правила только для настоящих запросов, игнорируя подзапросы (подзапрос может быть вызван, например, включением файла при помощи директивы <strong>SSI</strong><a><sup>*</sup></a>).</li>
<li><strong>NC</strong> (<em>nocase</em>) отключает проверку регистра символов.</li>
<li><strong>QSA</strong> (<em>qsappend</em>) добавляет исходные параметры запроса (<em>query string</em>) к&nbsp;<em>замене</em>. Если замена не&nbsp;включает в&nbsp;себя новые параметры запроса, то&nbsp;исходные параметры запроса добавляются автоматически. Если же включает, то&nbsp;без флага <strong>QSA</strong> исходные параметры запроса будут утеряны.</li>
<li><strong>PT</strong> (<em>passthrough</em>) останавливает процесс преобразования и&nbsp;передает полученную новую ссылку дальше &laquo;по цепочке&raquo;, чтобы над ней могли &laquo;поработать&raquo; директивы <strong>Alias</strong>, <strong>ScriptAlias</strong>, <strong>Redirect</strong> и&nbsp;им подобные (тогда как при флаге <strong>L</strong> новая ссылка считается окончательной и&nbsp;не подлежит дальнейшей обработке).</li>
<li><strong>S</strong> (<em>skip</em>) пропускает следующее правило, если данное правило &laquo;сработало&raquo;. Можно пропускать несколько правил, если указать их количество, например: "<strong>S=3</strong>".</li>
<li><strong>E</strong> (<em>env</em>) устанавливает переменную окружения, например: "<strong>E=переменная:значение</strong>".</li>
</ul>
<p>Примеры (во всех случаях показано содержимое файла <strong>.htaccess</strong>, расположенного в&nbsp;корневом каталоге веб-сайта):</p>
<p><em># Пример&nbsp;1. Каталоги проектов project1 и&nbsp;project2 веб-сайта www.site.com ранее содержали статические html-страницы, теперь же эти страницы расположены на&nbsp;двух отдельных веб-сайтах project1.ru и&nbsp;project2.ru (в&nbsp;той же иерархии)<br /> <br /> # Первый способ требует наличия модуля mod_proxy и&nbsp;создает дополнительную нагрузку на&nbsp;веб-сервер, но зато посетитель веб-сайта не&nbsp;знает, откуда в&nbsp;действительности выбираются веб-страницы<br /> <br /> # Символы / даются с&nbsp;вопросительными знаками, чтобы правильно обработать ссылки вида http://www.site.com/project1 и&nbsp;http://www.site.com/project1/<br /> <br /> RewriteRule ^project1/?(.*) http://project1.ru/$1 [P]<br /> RewriteRule ^project2/?(.*) http://project2.ru/$1 [P]<br /> <br /> # Второй способ возвращает внешние редиректы, так что посетитель увидит в&nbsp;адресной строке своего браузера, что страницы реально расположены на&nbsp;других веб-сайтах<br /> <br /> RewriteRule ^project1/?(.*) http://project1.ru/$1 [R]<br /> RewriteRule ^project2/?(.*) http://project2.ru/$1 [R]<br /> <br /> # Допустим, что в&nbsp;редиректах мы желаем передать в&nbsp;запросе какие-нибудь дополнительные параметры. Применение флага QSA позволит нам сохранить параметры оригинального запроса, так что ссылка http://site.com/project1/news.pl?mode=daily будет преобразована в&nbsp;http://project1.ru/news.pl?came_from=site.com&amp;mode=daily<br /> <br /> RewriteRule ^project1/?(.*) http://project1.ru/$1?came_from=site.com [R,QSA]<br /> RewriteRule ^project2/?(.*) http://project2.ru/$1?came_from=site.com [R,QSA]<br /> <br /> # Пример&nbsp;2. Электронная книга отдается динамическим скриптом в&nbsp;то время как нам желательно иметь &laquo;красивую&raquo; иерархию вида "http://lib.ru/book1/chapter3.html". Кстати, расширение .html помогает нам скрывать динамическую природу нашего веб-сайта<br /> <br /> RewriteRule ^([a-z0-9]+)/([a-z0-9]+).html$ /cgi-bin/view_chapter.cgi?book=$1&amp;chapter=$2 [NC]<br /> <br /> # Пример&nbsp;3. Нам желательно скрыть от&nbsp;пользователя используемую на&nbsp;веб-сайте технологию, для чего мы не&nbsp;будем пользоваться расширениями в&nbsp;наших http-ссылках. Без флага L данное правило зациклится<br /> <br /> RewriteRule (.+) $1.html [L]<br /> <br /> # В&nbsp;то же время посетитель может ввести ссылку с&nbsp;расширением по&nbsp;одному ему понятным причинам. Правильно обработать такую ситуацию поможет следующее правило:<br /> <br /> RewriteRule ^([^.]+) $1.html [L]<br /> <br /> # Пример&nbsp;4. На&nbsp;веб-сайте есть статические ссылки с&nbsp;расширением .html и&nbsp;динамические ссылки с&nbsp;расширением .pl. Допустим, что динамические ссылки остались прежними, а&nbsp;статические должны обрабатываться cgi-скриптом<br /> <br /> # Первый вариант предельно прост:<br /> <br /> RewriteRule (.+).html$ /cgi-bin/new_script.cgi?page=$1 [L]<br /> <br /> # Второй вариант более общий. Например, если нам нужно преобразовать массу различных ссылок кроме одной-двух, можно воспользоваться специальной &laquo;заменой без изменения&raquo; (обозначается символом -):<br /> <br /> RewriteRule .pl$&nbsp;&mdash; [L]<br /> RewriteRule (.*) /cgi-bin/new_script.cgi?page=$1 [L]<br /> <br /> # Пример&nbsp;5. Есть один особый случай, когда делается внешний редирект на&nbsp;относительную ссылку. Допустим, мы находимся в&nbsp;каталоге /home/site.com/www/test веб-сайта site.com. Каталог доступен по&nbsp;ссылке http://site.com/test/. Нам нужен внешний редирект с&nbsp;файлов *.html на&nbsp;*.shtml. Приводимые директивы записываются в&nbsp;файл /home/site.com/www/test/.htaccess<br /> <br /> # Решение тривиально, если использовать абсолютную замену, но в&nbsp;этом случае нам приходится жестко прописывать название каталога, что не&nbsp;совсем хорошо:<br /> <br /> RewriteRule (.+).html /test/$1.shtml [R]<br /> <br /> # Если написать замену как относительную ссылку (см. ниже), то&nbsp;результат будет не&nbsp;таким, каким мы его ожидаем увидеть (это обусловлено особенностями преобразования ссылок на&nbsp;уровне каталогов): например, ссылка http://site.com/test/aaa.html будет преобразована в&nbsp;http://site.com/home/site.com/www/test/aaa.shtml<br /> <br /> RewriteRule (.+).html $1.shtml [R]<br /> <br /> # По&nbsp;полученной ссылке видно, что там подставлен полный реальный путь к&nbsp;нужному файлу. Решить проблему можно при помощи директивы RewriteBase, параметром которой является префикс для всех относительных замен, находящихся в&nbsp;данном файле .htaccess<br /> <br /> RewriteBase /test<br /> <br /> # Пример&nbsp;6. Задание переменных окружения применяется очень редко, но тем не&nbsp;менее приведем два примера, не&nbsp;нуждающихся в&nbsp;пояснении<br /> <br /> # Сохраняет в&nbsp;окружении расширение исходного файла<br /> <br /> RewriteRule ^([^.]+).([a-z]+)$ /cgi-bin/new_script.cgi?page=$1 [L,E=EXT:$2]<br /> <br /> # Сохраняет в&nbsp;окружении содержимое http-заголовка X-Forwarded-For<br /> <br /> RewriteRule .(cgi|pl)$&nbsp;&mdash; [L,E=%{HTTP:X-Forwarded-For}]</em></p>
<div class="note-r">Директивы RewriteCond предназначены для проверки некоторых дополнительных параметров</div>
<p>Несмотря на&nbsp;такое изобилие, преобразование ссылок не&nbsp;ограничивается только директивой <strong>RewriteRule</strong>. Есть еще одна директива, которая используется не&nbsp;менее часто&nbsp;&mdash; это директива <strong>RewriteCond</strong>. Данная директива предназначена для проверки некоторых дополнительных параметров и&nbsp;всегда ставится непосредственно перед директивой <strong>RewriteRule</strong>. Если директива <strong>RewriteCond</strong> &laquo;срабатывает&raquo;, то&nbsp;проверяется следующая за ней директива <strong>RewriteRule</strong>, если же &laquo;не срабатывает&raquo;, то&nbsp;директива <strong>RewriteRule</strong>игнорируется.</p>
<p><em># Если подряд записаны несколько директив RewriteCond, то&nbsp;следующая за ними директива RewriteRule проверяется только в&nbsp;том случае, когда &laquo;сработали&raquo; все директивы RewriteCond:<br /> <br /> RewriteCond условие1<br /> RewriteCond условие2<br /> RewriteRule преобразование1<br /> <br /> RewriteRule преобразование2 <br /> <br /> # Следует обратить внимание, что в&nbsp;приведенном выше примере вторая директива RewriteRule проверяется в&nbsp;любом случае, так как все директивы RewriteCond относятся только к&nbsp;первой директиве RewriteRule. Если же вы желаете, чтобы условия относились к&nbsp;обеим директивам RewriteRule, то&nbsp;вам придется повторить их еще раз:<br /> <br /> RewriteCond условие1<br /> RewriteCond условие2<br /> RewriteRule преобразование1<br /> <br /> RewriteCond условие1<br /> RewriteCond условие2<br /> RewriteRule преобразование2<br /> <br /> # Применение флага OR позволяет объединять условия не&nbsp;по И&nbsp;(как это делается по&nbsp;умолчанию), а&nbsp;по ИЛИ. В&nbsp;следующем примере директива RewriteRule проверяется, если выполняется любое из&nbsp;двух предшествующих условий:<br /> <br /> RewriteCond условие1 [OR]<br /> RewriteCond условие2<br /> RewriteRule преобразование</em></p>
<p>Синтаксис директивы <strong>RewriteCond</strong> выглядит следующим образом:</p>
<p><em>RewriteCond &laquo;проверяемое выражение&raquo; &laquo;условие&raquo; &laquo;флаги&raquo;</em></p>
<p><em>Проверяемое выражение</em>&nbsp;&mdash; это строка, которая может состоять из&nbsp;обычных символов, макросов и&nbsp;переменных. Макросы <strong>$1</strong>, <strong>$2</strong> и&nbsp;так далее ссылаются на&nbsp;соответствующие выражения в&nbsp;скобках из&nbsp;следующей по&nbsp;порядку директивы <strong>RewriteRule</strong>. Макросы <strong>%1</strong>, <strong>%2</strong> и&nbsp;так далее ссылаются на&nbsp;выражения в&nbsp;скобках из&nbsp;предыдущей по&nbsp;порядку директивы <strong>RewriteCond</strong>. Кстати, макросы <strong>%*</strong> могут также использоваться и&nbsp;в директивах <strong>RewriteRule</strong> для ссылки на&nbsp;предыдущую директиву <strong>RewriteCond</strong>.</p>
<table align="left">
<tbody>
<tr>
<td class="text_picture" align="center"><img src="http://hostinfo.ru/ill/030916rewrite4.jpg" alt="" width="191" height="170" border="1" /></td>
</tr>
</tbody>
</table>
<p>Переменные записываются в&nbsp;виде <strong>%{ИМЯ_ПЕРЕМЕННОЙ}</strong>. Наиболее часто используются следующие переменные: <strong>QUERY_STRING</strong> (параметры запроса), <strong>REMOTE_ADDR</strong> (IP-адрес<a><sup>*</sup></a> посетителя), <strong>REMOTE_HOST</strong> (имя хоста посетителя), <strong>REMOTE_USER</strong> (имя пользователя, если он&nbsp;прошел авторизацию), <strong>REMOTE_METHOD</strong> (обычно <em>GET</em> или <em>POST</em>), <strong>PATH_INFO</strong> (путь к&nbsp;файлу веб-страницы), <strong>HTTP_USER_AGENT</strong> (содержимое http-заголовка <em>User-Agent</em>), <strong>HTTP_REFERER</strong> (содержимое http-заголовка <em>Referer</em>), <strong>HTTP_COOKIE</strong> (содержимое http-заголовка <em>Cookie</em>), <strong>HTTP_HOST</strong> (имя хоста веб-сайта), <strong>TIME_YEAR</strong> (все переменные <em>TIME_*</em> хранят разбитые на&nbsp;части текущие дату и&nbsp;время), <strong>TIME_MON</strong>, <strong>TIME_DAY</strong>, <strong>TIME_HOUR</strong>, <strong>TIME_MIN</strong>, <strong>TIME_SEC</strong>, <strong>TIME_WDAY</strong>, <strong>REQUEST_URI</strong> (строка запроса без имени хоста и&nbsp;параметров запроса), <strong>REQUEST_FILENAME</strong> (имя файла из&nbsp;<em>REQUEST_URI</em>), <strong>THE_REQUEST</strong> (полная строка запроса в&nbsp;том виде, в&nbsp;котором ее&nbsp;присылает браузер посетителя). Помимо стандартных переменных можно проверять содержимое любого http-заголовка: <strong>%{HTTP:Название-Заголовка}</strong>.</p>
<p><em>Условие</em>&nbsp;&mdash; это обычное регулярное выражение. Кроме регулярных выражений существует еще несколько видов условий (условию может предшествовать символ <strong>!</strong>, который трактуется как отрицание):</p>
<ul>
<li><strong>=ABC</strong>&nbsp;&mdash; значение переменной должно быть лексически равно строке <em>ABC</em></li>
<li><strong>&gt;ABC</strong>&nbsp;&mdash; значение переменной должно быть лексически больше строки <em>ABC</em></li>
<li><strong>&nbsp;&mdash; значение переменной должно быть лексически меньше строки <em>ABC</em></strong></li>
<li><strong>-d</strong>&nbsp;&mdash; должен существовать каталог, имя которого совпадает со&nbsp;значением переменной</li>
<li><strong>-f</strong>&nbsp;&mdash; должен существовать файл, имя которого совпадает со&nbsp;значением переменной</li>
<li><strong>-s</strong>&nbsp;&mdash; должен существовать файл <strong>ненулевой длины</strong>, имя которого совпадает со&nbsp;значением переменной</li>
<li><strong>-l</strong>&nbsp;&mdash; должен существовать симлинк, имя которого совпадает со&nbsp;значением переменной</li>
<li><strong>-F</strong>&nbsp;&mdash; должен существовать файл, имя которого совпадает со&nbsp;значением переменной, и&nbsp;этот файл должен быть <strong>доступен по&nbsp;внешней ссылке</strong> на&nbsp;данный веб-сайт</li>
<li><strong>-U</strong>&nbsp;&mdash; должна быть доступна http-ссылка, имя которой совпадает со&nbsp;значением переменной</li>
</ul>
<p><em>Флагов</em> может быть всего два: <strong>OR</strong> (объединение директив <strong>RewriteCond</strong> по&nbsp;<strong>ИЛИ</strong>, как было написано выше) и&nbsp;<strong>NC</strong> (отключение проверки регистра аналогично одноименному флагу для директивы <strong>RewriteRule</strong>).</p>
<p>И, наконец, примеры применения:</p>
<p><em># Пример&nbsp;1. Жесткий запрет посещений нашего веб-сайта для робота поисковой системы Google<br /> <br /> RewriteCond %{USER_AGENT} Googlebot<br /> RewriteRule .*&nbsp;&mdash; [F]<br /> <br /> # Другой вариант возвращает вместо ошибки 403&nbsp;(FORBIDDEN) ошибку 404&nbsp;(NOT_FOUND)<br /> <br /> RewriteCond %{USER_AGENT} Googlebot<br /> RewriteRule .*&nbsp;&mdash; [R=404]<br /> <br /> # Пример&nbsp;2. Есть два каталога /home/site/storage1 и&nbsp;/home/site/storage2, в&nbsp;которых нужно искать запрашиваемые файлы<br /> <br /> RewriteCond /home/site/storage1/%{REQUEST_FILENAME} -f<br /> RewriteRule (.+) /home/site/storage1/$1 [L]<br /> <br /> RewriteCond /home/site/storage2/%{REQUEST_FILENAME} -f<br /> RewriteRule (.+) /home/site/storage2/$1 [L]<br /> <br /> # Пример&nbsp;3. Если ссылка не&nbsp;найдена на&nbsp;нашем веб-сайте, отправить посетителя на&nbsp;www.site.ru<br /> <br /> RewriteCond %{REQUEST_URI} !-U<br /> RewriteRule (.*) http://www.site.ru/$1 [R]<br /> <br /> # Пример&nbsp;4. Закрыть доступ к&nbsp;веб-сайту в&nbsp;рабочее время<br /> <br /> RewriteCond %{TIME_HOUR}%{TIME_MIN} &gt;1000<br /> RewriteCond %{TIME_HOUR}%{TIME_MIN} RewriteRule .*&nbsp;&mdash; [F]<br /> <br /> # Пример&nbsp;5. Есть скрипт, раз в&nbsp;сутки производящий оптимизацию базы данных. Если посетитель зайдет в&nbsp;этот момент на&nbsp;веб-сайт, то&nbsp;получит ошибку&nbsp;&mdash; вместо этого необходимо показать ему страницу с&nbsp;сообщением о&nbsp;том, что через пару минут все придет в&nbsp;норму. Оптимизирующий скрипт на&nbsp;время своей работы создает файл /home/site/optimizer.pid<br /> <br /> RewriteCond /home/site/optimizer.pid -f<br /> RewriteRule .* /optimization_message.html<br /> <br /> # Пример&nbsp;6. Посетители веб-сайта авторизуются при помощи стандартной авторизации (AuthType BasicAuth). Необходимо по&nbsp;ссылке /home/* показывать содержимое их домашних каталогов<br /> <br /> RewriteCond %{REMOTE_USER} !=""<br /> RewriteCond /home/(%{REMOTE_USER}) -d<br /> RewriteRule (.*) /home/%1/$1</em></p>
<div class="note-r">Для простейших преобразований можно пользоваться директивами Redirect и&nbsp;RedirectMatch</div>
<p>И в&nbsp;заключение вкратце упомянем еще о&nbsp;двух директивах преобразования ссылок, которые не&nbsp;входят в&nbsp;модуль <strong>mod_rewrite</strong>&nbsp;&mdash; это <strong>Redirect</strong> и&nbsp;<strong>RedirectMatch</strong>. Ими можно пользоваться, во-первых, как упрощенными вариантами директивы <strong>RewriteRule</strong>, а&nbsp;во-вторых, в&nbsp;случаях, когда модуль <strong>mod_rewrite</strong> по&nbsp;каким-то причинам отсутствует в&nbsp;вашей сборке веб-сервера <strong>Apache</strong>. Примеры:</p>
<p><em># Обе директивы при &laquo;срабатывании&raquo; возвращают редиректы. В&nbsp;качестве замены всегда должна использоваться абсолютная ссылка<br /> <br /> # Обычный безусловный редирект:<br /> <br /> Redirect /news http://www.site.com/cgi-bin/news.cgi<br /> <br /> # Редирект с&nbsp;подстановкой:<br /> <br /> RedirectMatch (.*.gif)$ http://www.site.com/alt/path/to/gif/files$1</em></p>
<p>Возможно, на&nbsp;первый взгляд преобразование http-ссылок с&nbsp;помощью модуля <strong>mod_rewrite</strong> покажется очень сложной задачей, но на&nbsp;самом деле это не&nbsp;так: с&nbsp;опытом придет и&nbsp;понимание, и&nbsp;мастерство. Если вы внимательно читаете документацию, четко представляете необходимые преобразования ссылок и&nbsp;тщательно проверяете написанные вами правила, все будет работать правильно. Иначе и&nbsp;быть не&nbsp;может, не&nbsp;так ли?</p>]]></description><pubDate>2011-10-04 00:00:00</pubDate></item></channel></rss>
