О сайтах и не о сайтах

Теперь и в tg!

tg

Переехал с твиттера на t.me/tulvit_blog, если что.

LAMP. Ubuntu Linux + Apache + MySQL + PHP.

В статье рассматривается установка веб-сервера, его конфигурирование, установка необходимых расширений и библиотек, дополнительных веб-приложений и тестирование всего этого на примере установки CMS Drupal.

Статья рассчитана на начинающих пользователей Linux, поэтому содержит теоретические вставки и предполагает использование GUI там, где это возможно и оправдано.

В качестве дистрибутива Linux используется Ubuntu 10.04, хотя инструкция, надо полагать, справедлива как для других версий Ubuntu, так и для некоторых других дистрибутивов.

Установка Apache

Текущая версия Apache 2.2.Х, поэтому в качестве названия чаще всего будет фигурировать не «apache», а «apache2» или «a2».

Итак, заходим в менеджер пакетов Synaptic и вбиваем в поиск слово «apache2».

установка Apache2 через менеджер пакетов Synaptic

Пакет «аpache2» является метапакетом, его установка повлечет за собой установку пакетов apache2-mpm-worker (обеспечивает многопоточность), apache2-utils (содержит некоторые дополнительные утилиты для тестирования и управления сервером), apache2.2-bin (двоичные файлы), apache2.2-common (сценарии настройки и поддержки) и ряда библиотек. Все вместе весит чуть больше 10МБ.

Отмечаем пакет «apache2» для установки, соглашаемся с установкой дополнительных пакетов, нажимаем «применить».

Все, Apache установлен. Переходим в браузере по адресу http://localhost/, чтобы проверить работоспособность. Если все сделали правильно, должно вывестись сообщение «It works!».

проверка работы веб-сервера Apache, вывод сообщения "It works!"

Для проверки статуса сервера, его включения, выключения, рестарта или перезагрузки данных конфигурации используются следующие команды:

/etc/init.d/apache2 status
sudo /etc/init.d/apache2 start
/etc/init.d/apache2 stop
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/apache2 reload

Start, restart и reload надо производить с root правами (используя sudo), в противном случае будет ошибка такого вида:

Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down

Это связано с тем, что работать с портами 0-1024 можно только имея административные права (в данном случае используется 80-й порт, стандартный для веб-сервера).

По умолчанию сервер будет автоматически запускаться вместе со стартом системы.

Файл конфигурации Apache хранится по адресу /ect/apache2/apache2.conf. Привычный файл httpd.conf располагается в той же папке и предназначен для пользовательской конфигурации, поэтому изначально пуст.

Корневым каталогом для сервера является каталог /var/www. Если в него заглянуть, можно обнаружить файл index.html, именно содержание этого файла нам вывелось, когда мы набрали в браузере «http://localhost/».

Если при попытке старта, остановки или перезапуска выдается ошибка вида

Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName»

то стоит прописать ServerName вручную.

Открываем файл httpd.conf в редакторе gedit с правами администратора

sudo gedit /etc/apache2/httpd.conf

прописываем

ServerName 127.0.0.1

и сохраняем.

Установка PHP

Переходим в менеджер пакетов Synaptic и вводим в поиск «php5».

установка php5 через менеджер пакетов Synaptic

Отмечаем и устанавливаем метапакет «php5», в который помимо всего прочего входит модуль php5 для Apache libapache2-mod-php5.

PHP установлен, осталось только его проверить. Для этого создаем в папке /var/www файл test.php. Так как на папку www стоят права 755, никто кроме root-а не имеет прав доступа на изменения чего-либо в ней.

Наберем в терминале

sudo gedit /var/www/test.php

Это команда создает от имени администратора файл test.php и открывает его для изменения в текстовом редакторе gedit.

Вписываем в открывшийся документ следующий код

и сохраняем. К слову, созданный файл получил права 644, что также оставляет права на редактирование только за root-ом.

После этого перезапускаем Apache и переходим в браузере по адресу http://localhost/test.php. Если все сделали правильно, то должна вывестись информация о php:

вывод функции phpinfo для проверки работы php и сервера Apache

Конфигурационный файл php находится в /etc/php5/apache2/php.ini, права на файл выставлены 644, поэтому что-либо изменить в нем можно только открыв файл для редактирования с root правами. Советую сразу в php.ini изменить строчку «display_errors = Off» на «display_errors = On», в противном случае если в коде будут какие-то ошибки, браузером будет отдаваться пустая страница без пояснений. Также не ищите в файле php.ini подключаемых расширений, код для их подключения находится в ini файлах в папке /etc/php5/conf.d. Этот каталог при каждом запуске сервера сканируется, и информация из расположенных в нем ini файлов подключается к главному конфигурационному файлу php.ini.

Установка MySQL

Переходим в Synaptic, вбиваем в поиск «mysql-server-5.1», отмечаем для установки пакет «mysql-server», который является метапакетом и потянет за собой как сам MySQL сервер последней версии, так и другие пакеты, в частности пакет MySQL клиента mysql-client-5.1.

установка сервера баз данных MySQL через менеджер пакетов Synaptic

Соглашаемся с установкой дополнительный пакетов и кликаем на «Применить». В процессе установки у нас скорее всего потребуют ввести и подтвердить пароль для root-пользователя базы данных (ничего общего с root-ом самой Linux он не имеет). Вводим, подтверждаем и ждем завершения установки пакетов.

СУБД MySQL установлена. По умолчанию создаются две базы данных, mysql (системная) и information_schema (своего рода информационная метабаза, данные в ней нельзя редактировать или удалять, только просматривать, также под нее не создается отдельного каталога).

Проверим, действительно ли создались эти две базы данных. Для работы в MySQL в консоле и выполнения SQL запросов воспользуемся утилитой mysql (входит в состав пакета mysql-client, который мы уже установили).

mysql -u root -p

У нас запросится пароль, который мы вводили при установке MySQL. Вводим его. В результате мы должны получить приглашение командной строки для ввода команд MySQL и выражений на языке SQL. Запросим показать имеющиеся базы данных.

show databases;

Должен вывестись список имеющихся баз данных, в нашем случае это mysql и information_schema.

Выходим из mysql:

exit;

Выглядеть это должно примерно так:

проверка работы MySQL с использованием утилиты mysql

Для старта, остановки или перезагрузки MySQL используйте команды:

sudo /etc/init.d/mysql start
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql restart

Если эти команды будут приводить к сообщениям вида

Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service mysql restart
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the restart(8) utility, e.g. restart mysql

и старт, остановка или перезапуск сервера БД не будет происходить, используйте следующие команды:

sudo service mysql start
sudo service mysql stop
sudo service mysql restart

Главный конфигурационный файл MySQL находится в /etc/mysql/my.cnf.

Каталоги с базами данных по умолчанию находятся в /var/lib/mysql. Право на просмотр и редактирования содержимого этого каталога имеет только пользователь с root правами. Если постоянно вводить команду «sudo» не хочется, то можно запустить файловый менеджер Nautilus от имени суперпользователя. Нажмите Alt+F2 и наберите gksudo nautilus:

запуск файлового менеджера nautilus с помощью команды gksudo

У вас запросится пароль администратора, после ввода которого откроется Nautilus с неограниченными правами, где вы уже легко сможете просмотреть содержимое любых каталогов.

использование запуска файлового менеджера nautilus с административными правами для просмотра каталогов с ограниченными правами

Более того, все файлы, открытые в запущенном от имени администратора Nautilus-е, также будут открыты от имени администратора, а соответственно и доступны для редактирования.

Установка phpMyAdmin

Консоль это конечно хорошо, но не слишком удобно. Поэтому установим phpMyAdmin, веб-интерфейс для администрирования СУБД MySQL.

Переходим в Synaptic, вбиваем в поиск «phpmyadmin» и отмечаем для установки пакет с аналогичным названием, соглашаемся на установку дополнительных пакетов, применяем изменения.

установка веб-интерфейса для MySQL phpMyAdmin используя менеджер пакетов Synaptic

Во время установки пакета вам надо будет ответить на несколько вопросов. В качестве веб-сервера надо выбрать Apache2, согласиться с автоматической настройкой phpMyAdmin, ввести root пароль MySQL и назначить пароль для самой phpMyAdmin.

PhpMyAdmin установлен, переходим по адресу http://localhost/phpmyadmin/, вводим логин и пароль (который мы назначили в процессе установки phpMyAdmin) и оказываемся в административной части.

административная часть веб-интерфейса для MySQL phpMyAdmin

Файлы конфигурации phpMyAdmin хранятся в /etc/phpmyadmin, сам phpMyAdmin лежит в /usr/share/phpmyadmin, а не в /var/www, как можно было бы подумать (в конфигурационном файле /etc/phpmyadmin/apache.conf прописан алиас «Alias /phpmyadmin /usr/share/phpmyadmin»).

Установка модулей Apache

Скорее всего, нам рано или поздно придется ставить некоторые модули для Apache. Какие-то модули уже установлены, но не активированы, какие-то придется выкачивать используя все тот же Synaptic.

Скаченные и доступные модули хранятся в папке /etc/apache2/mods-available, включенные — в папке /etc/apache2/mods-enabled (папка содержит символические ссылки на доступные модули из папки mods-available).

В первую очередь нас интересует модуль mod_rewrite (если коротко — используется для ЧПУ, 301 редиректа, организации запрета хотлинков).

Модуль mod_rewrite у нас уже установлен (/etc/apache2/mods-available/rewrite.load), осталось его только активировать.

Для включения и выключения модулей используются следующие команды:

sudo a2enmod модуль
sudo a2dismod модуль

Где a2enmod расшифровывается как Apache2 enable module, т.е. включить модуль апача, а a2dismod наоборот, выключить.

Включим модуль mod_rewrite:

sudo a2enmod rewrite

и перезагрузим апач:

sudo /etc/init.d/apache2 restart

Мод установлен. Теперь, если мы перейдем по адресу http://localhost/test.php (где мы сделали вывод функции phpinfo), то в графе «Loaded Modules» мы увидим наш активированный модуль mod_rewrite.

Установка библиотек расширений PHP

В первую очередь, конечно же, надо установить библиотеку php-mysql для работы с MySQL функциями. Однако это библиотека у нас уже стоит, она требовалась для работоспособности phpMyAdmin и поставилась автоматически.

Поэтому ставить будем php-curl (Client URL Library). Заходим в Synaptic, набираем в строке поиска php-curl, отмечаем для установки, применяем. В отличии от предыдущих устанавливаемых нами пакетов, этот пакет ничего кроме php-curl за собой не потянет, т. к. является просто расширением.

установка расширения для php cURL используя менеджер пакетов Synaptic

После установки пакета в выводе функции phpinfo() должна появиться информация об установленном cURL.

проверка установленного расширения для php cURL с помощью вывода функции phpinfo

Создание виртуальных хостов

По умолчанию корневой директорий у нас является /var/www, но это не очень удобно. Хочется для каждого сайта создать отдельную папку, получить полную свободу действий без ограничений по правам (хотя, конечно, и на /var/www права изменить никто не запрещает).

Создадим в нашем домашнем каталоге (/home/username) папку sites, в ней папку test.my, а в папке test.my папку public. Создадим и поместим в папку public файл index.php следующего содержания:

Теперь необходимо сделать так, чтобы при обращении в браузере к адресу http://test.my или http://www.test.my на экран выводилась надпись «Hello, world!».

Зайдем в папку /etc/apache2. Здесь мы увидим помимо прочего два каталога — sites-available и sites-enabled. Как и в случае с модулями, в папке sites-available хранится информация о существующих хостах, а в папке sites-enabled о подключенных, причем файлы в ней являются символическими ссылками на файлы из папки sites-available.

Создадим в каталоге sites-available файл test.my (к слову, назвать его можно как угодно, но так просто легче не запутаться) и откроем его для редактирования.

sudo gedit /etc/apache2/sites-available/test.my

Скопируем в него полностью содержимое файла /etc/apache2/sites-available/default (отрыть для чтения его можно просто двойным кликом) и внесем некоторые изменения.

После строчки

ServerAdmin webmaster@localhost

добавим

ServerName test.my
ServerAlias www.test.my

Заменим адрес директории

DocumentRoot /var/www

на директорию, созданную нами в своем домашнем каталоге

DocumentRoot /home/username/sites/test.my/public

Теперь разрешим использовать файл .htaccess для этого хоста.

Заменим строчку

на

А также изменим значение

AllowOverride None

на значение

AllowOverride All

Без этих изменений файл .htaccess в корне нашего сайта будет игнорироваться.

Вместо username, естественно, надо поставить свой логин в системе. После чего закрываем файл с сохранением изменений.

В принципе, можно было изменить и директорию для сохранения логов, но это необязательно. К слову, папка test.my/public сделана исключительно для удобства, чтобы в случае чего создать еще test.my/log, test.my/tmp и другие, так что вместо /var/www можно указать и просто /home/username/sites/test.my.

Переходим к редактированию файла hosts.

sudo gedit /etc/hosts

Добавляем строчку

127.0.0.1 test.my www.test.my

и закрываем файл hosts с применением изменений.

Осталось только включить наш сайт, перезапустить апач и проверить, все ли работает нормально.

Включаем сайт:

sudo a2ensite test.my

Для выключения сайта используется команда

sudo a2dissite test.my

Перезагружаем апач

sudo /etc/init.d/apache2 restart

или

sudo /etc/init.d/apache2 reload

И переходим в браузере по адресам test.my и www.test.my. В обоих случаях должна выводиться надпись «Hello, world!».

проверка работы созданного виртуального хоста

Установка Drupal

LAMP у нас уже установлен, осталось его протестировать. Всякие phpinfo() и прочие «Hello, world» это конечно хорошо, но установка CMS поможет протестировать именно связку MySQL, php и кучи модулей и выявить проблемы, если таковые имеются. Итак, приступим.

Для начала создадим папку /home/username/sites/drupal1.my/public и настроим виртуальный хост для нашего будущего сайта.

Далее скачаем последний дистрибутив Drupal с официального сайта drupal.org и распакуем его содержимое в папку public. В папке с Drupal необходимо создать копию файла sites/default/default.settings.php и переименовать ее в sites/default/settings.php (сам файл default.settings.php изменять или удалять нельзя).

Если вы распакуете архив с Drupal в другую папку, а потом просто все скопируете в public, не забудьте перед самим копированием включить в файловом менеджере отображение скрытых файлов (в Nautilus-е это Ctrl+H или Вид/Показывать скрытые файлы). Дело в том, что файл .htaccess начинается с точки, а значит в Linux является скрытым. Если вы его не скопируете в папку с вашим сайтом, то как минимум не будет работать mod_rewrite.

Создадим БД для нашего сайта, воспользовавшись уже установленным phpMyAdmin. Базу назовем, к примеру, drupal1.

После того, как база данных создана, переходим в браузере по адресу drupal1.my. Нас должно средиректить на страницу установки drupal1.my/install.php?profile=default. Если редиректа не произошло, то сами переходим по адресу drupal1.my/install.php.

Выбираем «Install Drupal in English» и переходим к следующему шагу установки. Сразу могут посыпаться ошибки, связанные с правами доступа, но это решается довольно быстро.

Ошибка:

The Drupal installer requires write permissions to ./sites/default/settings.php during the installation process.

Проверим, какие права у нас стоят на файл settings.php

ls -l /home/username/sites/drupal1.my/public/sites/default/settings.php

Права стоят rw-r--r-- (или 644 в восьмеричной системе счисления), т.е. изменять файл может только его владелец. Изменим права на rw-r--rw-, или 646.

chmod 646 /home/username/sites/drupal1.my/public/sites/default/settings.php

Теперь вернемся к нашему Drupal и нажмем на ссылку «tray again». Ошибка должна исчезнуть.

Вторая ошибка, связанная с правами доступа, может звучать так:

The directory sites/default/files does not exist. An automated attempt to create this directory failed, possibly due to a permissions problem.

Drupal не может создать папку files, т.е. cкорее всего ограничены права на запись для папки default. Проверим их.

ls -ld /home/username/sites/drupal1.my/public/sites/default

Права rwxr-xr-x (или 755), а значит право на запись имеет только владелец. Изменим их на rwxr-xrwx (757).

chmod 757 /home/username/sites/drupal1.my/public/sites/default

Снова вернемся к Drupal и перейдем по ссылке «tray again». Ошибок с правами доступа больше быть не должно, и мы перейдем к основным этапам установки.

На первом этапе нас попросят ввести имя базы данных, имя пользователя и пароль к БД. Базу данных мы назвали drupal1, в качестве пользователя указываем root, пароль указываем тот, который мы вводили при установке MySQL. В разделе «Advanced options/Database host» оставляем localhost. Кликаем на «Save and continue».

На следующем этапе установки надо будет указать e-mail сайта (с которого будут рассылаться автоматические письма, всякие уведомления или напоминания пароля, первоначально можно написать любой адрес). Также необходимо указать регистрационные данные первого пользователя (логин, пароль, e-mail). Напомню, в Drupal'e первый пользователь является администратором и обладает неограниченными правами. Далее выставляем часовой пояс и разрешаем или запрещаем автоматическую проверку обновлений (по умолчанию разрешено). В пункте «Clean URLs» можете выбрать между «Disabled» и «Enabled», по умолчанию поддержка чистых ссылок включена.

На этом этапе установки Drupal уже внес все необходимые изменения в файл settings.php и папку default, поэтому в целях безопасности возвращаем им изначальные права (конечно, для тестов вопросы безопасности не так важны, но привычку делать все правильно надо вырабатывать изначально).

chmod 644 /home/username/sites/drupal1.my/public/sites/default/settings.php
chmod 755 /home/username/sites/drupal1.my/public/sites/default

После смены прав возвращаемся к Drupal и кликаем «Save and continue».

Скорее всего появится ошибка

Unable to send e-mail. Please contact the site administrator if the problem persists.

но у нас не стоит задачи поднять почтовый сервер, поэтому кликаем на «you new site».

установленный Drupal

Drupal работает, что подтверждает правильность установки и настройки LAMP.

Комментарии

Есть такая проблемка, уже долго пытаюсь решить. Суть вот в чем, AllowOverride None на AllowOverride All поменял, сам mod_rewrite включен, а чистые ссылки в Drupal`e, так и не работают. Сам сайт лежит в стандартной папке /var/www. Сколько не капал гугл, везде стандартное решение...

А оригинальный (из дистрибутива) файл .htaccess в корне сайта есть?

Да есть, в нем:

*IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
*/IfModule*

Вместо * - < или >

Выбор между Disabled/Enabled в админке на site.com/?q=admin/settings/clean-urls просто не активен? Там тогда должна даваться ссылка на руководство по Clean URLs drupal.org/node/15365, вполне возможно, что прочитав решить проблему получится.

Хотел еще сейчас посоветовать все-таки сделать виртуальный хост и на нем потестить, но проверил сам на /var/www - у меня все работает, значит причина не в этом.

А mod_rewrite точно включен? В выводе команды apache2ctl -M он присутствует?

Ну и чтобы сразу отсечь проблему с .htaccess, надо наверно попробовать засунуть из него код (приведенный выше в комменте) сразу напрямую в конфигурационный файл Апача и перезапустить его. Если заработает - разбираться, почему .htaccess не читается, если не заработает, думать дальше. (Если этот метод попробуете, отпишитесь потом о результатах, самому очень интересно.)

/просто не активен?
так точно, в других CMS`ках таже проблема всегда встречалась
/на руководство по Clean URLs drupal.org/node/15365
Заходил, много английских букв, пока оставил как крайнее средство
/Хотел еще сейчас посоветовать все-таки сделать виртуальный хост
Пробовал конечно, тоже самое
/В выводе команды apache2ctl -M он присутствует?
Да, все есть
/сразу напрямую в конфигурационный файл Апача
имеется ввиду в httpd.conf ? Прописал, при перезагрузке выдает ошибку, вместо ОК пишет ОШИБКА
/почему .htaccess не читается
читается вроде, попробовал поменять там RewriteEngine On на RewriteEngine All, сервер сразу упал

Хм, тогда стоит прописать в httpd.conf
*Directory /var/www>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
*/Directory>
(вместо * <)
Потом ребутнуть
sudo /etc/init.d/apache2 reload
Должно помочь. Вместо /var/www полный путь до сайта с Друпалом.

Прописал, все перезагрузилось на этот раз без ошибок, но эффекта нет, чистые ссылки так и не работают...

Странно все это) А если в файл .htaccess добавить какой-нибудь мусор (в конец дописать нечитабельную строчку типа "jdsfklsdjf") и обратиться к сайту, то он загрузится или выдаст 500 Internal Server Error?

/выдаст 500 Internal Server Error?
Вот именно ее и выдает, согласен, странно, вот и мучаюсь уже пару дней :(

В папке /etc/apache2/mods-enabled файлик rewrite.load есть?
Апач, как я понял, второй стоит.
Ситуация вырисовывается интересная) mod_rewrite работает, .htaccess обрабатывается и сам по себе правильный (раз родной Drupal'a). Надо как-то тестить сам mod_rewrite, узнать, на чем он спотыкается.

/В папке /etc/apache2/mods-enabled файлик rewrite.load есть?
Да есть, он же включен. Апач второй, да. Может я всю папку с настройками залью куда-нибудь, сможешь посмотреть? Вдруг все таки я где-то ошибся просто...

Почта на странице с контактами. Жду на почту всю папку apache2 целиком (она вроде всего 100кб весит). А сам Drupal стоит прямо в /var/www, без подпапок?

Отправил. Да, без подпапок.

Получил, все идентично моим настройкам, за исключением того, что у меня в httpd.conf прописано ServerName 127.0.0.1. В качестве отсутствия других вариантов, можно попробовать добавить эту строчку и ребутнуть апач)

Пока гуглю по запросу "не работает mod rewrite" и смежным, но в большинстве случаях у всех решаются проблемы штатными средствами, уже описанными в комментариях.

/добавить эту строчку и ребутнуть апач
И это не помогло :(
/в большинстве случаях у всех решаются проблемы штатными средствами
О том и говорил в начале, то же по этому запросу не мало полазил.
Все равно спасибо большое, что попытались помочь и за потраченное время.

/Все равно спасибо большое, что попытались помочь и за потраченное время.
Да не за что) Сейчас читаю документацию по mod rewrite, забористая вещь, надо видимо для начала настроить вывод логов модуля, и там уже исходя из ситуации как-то действовать. Но проблему решить надо. Хотя бы чисто принципиально. Сейчас пока пытаюсь с логами разобраться)

Для логов надо прописать в httpd.conf
RewriteLog "/home/rewrite.log"
RewriteLogLevel 9
И ребутнуть апач. Потом полазить по сайту. Если в лог что-нибудь запишется, то это очень хорошо, значит хоть как-то, но работает, тогда уже можно судя по записям наметить хотя бы вектор дальнейшего движения. Адрес для файла лога можно задать произвольный, у меня в примере /home/rewrite.log, но это не лучший вариант, конечно.

Еще можно добавить в .htaccess строчку
Redirect /test http://www.google.com
И перейти на сайте на site.com/test, если mod_rewrite работает, то должно средиректить на гугл.
PS Кстати, а если отключить сайт (sudo a2dissite site), ребутнуть апач, включить сайт, ребутнуть апач, то тоже не работает? Может настройки не принялись. Хотя по логике вещей раз мусор в .htaccess приводит к 500-ой ошибке, то значит все внесенные изменения действительны. Но попробовать стоит)

/Для логов надо прописать в httpd.conf
Сделал, логи записались в rewrite.log
/Еще можно добавить в .htaccess строчку Redirect
Тоже работает, то еста если отключить сайт попал на гугл
/а если отключить сайт (sudo a2dissite site)
Вот тут уже интересней, при попытке выключить сайт, получил "ERROR: Site localhost does not exist!"

/то еста если отключить сайт
это можно не читать, опечатка :(

/это можно не читать, опечатка :(
Редиректит даже если сайт работает? Т.е. главная грузится, в админку пускает, по ссылкам ходит, а если перейти на страницу, сделанную для редиректа, то уже перебрасывает на гугл? А редиректит на главную гугла или на сайт гугл.ком?q=test, если мод реврайт работает, то должен быть второй вариант, с отключенным mod_rewrite тоже будет редирект, но чисто на главную страницу гугла.
/Сделал, логи записались в rewrite.log
Это очень хорошо) А логи когда начинают писаться, сразу по переходу на сайт, только при переходе на страницу админки для включения чистых ссылок или только при редиректе? Если во всех трех случаях, то хотелось бы получить на почту три разных лога для всех трех случаев (т.е. чистится файл с логами, переходится, скажем, на главную страницу, как только логи записались, сохранить в отдельный файл, файл с логами почистить, перейти на страницу с редиректом, записанные логи записать снова в отдельный файл и т.д., а то в куче текста логов трудно будет понять что к чему, а так сразу все распределено).
/получил "ERROR: Site localhost does not exist!"
В команде sudo a2dissite site и sudo a2ensite site под сайтом подразумевается название файлика в apache2/sites-available, если ничего в папке apache2 не изменилось после отсылки мне на почту, то надо писать sudo a2dissite default. А вообще можно набрать sudo a2dissite и два раза нажать на Tab, должен вывестись список доступных сайтов (подключенный default еще может числиться под именем 000-default, получается отключать его надо по имени 000-default, а включать по default). Ну и конечно после включения и включения сайта должна идти перезагрузка апача. Чтобы удостовериться, что сайт отключили/включили, можно смотреть на содержимое папки apache2/sites-enabled, при подключенном сайте там должна быть ссылка на файл из папки sites-available, а при отключении сайта пропадать.

Редирект идет на главную страницу гугла http://www.google.ru/ и только со страницы localhost/test
По логам, записал при переходе на главную страницу(1), при переходе в админку(2), при переходе на страницу с редиректом(3), вроде все правильно сделал... Отправил на почту.
Выключил/включил сайт, чистые ссылки не заработали.

Логи почитал, ничего интересного в них не нашел =(
Тогда пойдем другим путем) Сделаем новый виртуальный хост, создадим и закинем в него файлик test.html с любым содержанием, потом создадим в корне файл .htaccess и впишем туда
RewriteEngine on
RewriteBase /
RewriteRule ^test-test\.php$ test.html [R]
Теперь если мы обратимся к site.com/test-test.php нас должно перекинуть на test.html, если это произойдет, то mod_rewrite работает.
Хотел еще попросить логи вышепредложенной операции, но у меня почему-то при этом логи не пишутся, сравнить будет не с чем.

Кстати, забыл спросить, а какой дистрибутив Линукса используется? Может это какой-то глюк именно дистрибутива (взаимосвязь проследить сложно, но почему бы и нет). Тогда имеет смысл почитать/поспрашивать на форумах именно этого дистрибутива. Или же перейти на Убунту=). Сдается мне, что потестить LAMP на Убунте можно и без ее установки на хард, а загрузившись с LiveCD. Все пакеты по сути будут установлены в сформированную файловую систему в оперативке, Друпал записать на флешку и закинуть потом в /var/www.

/Кстати, забыл спросить, а какой дистрибутив Линукса используется?
Так в том то и дело что убунту стоит последняя, поэтому и спросил, может что не так сделал, что у меня не работают чистые ссылки...
/Или же перейти на Убунту=)
Как раз таки наоборот, надо с нее переходить на Debian(или другой дистр по вкусу), так как он гораздо стабильнее и производительней (уже скоро буду полностью мигрировать на него). А убунту больше подходит для первого знакомства с ОС Linux, так как там все просто и красиво. Да кстати, только в убунту и на ее модификациях есть sudo, в других дистрах надо логиться под root`ом, а потом уже выполнять комады.
P.S.: Новый виртуальный хост сделаю завтра сутра и отпишусь.

Еще стоит посмотреть error-лог самого Апача, /var/log/apache2/error.log. Если лог большой, то пройтись поиском по слову "rewrite".
Как вариант можно добавить в .htaccess строчку "Options +FollowSymLinks".
Для проверки работы mod_rewrite помимо уже приведенного выше кода можно попробовать добавить в .htaccess этот:
RewriteEngine on
RewriteBase /
RewriteRule ^.*$ test.html
Тогда при обращении к любой странице site.com/ должна выводиться информация из test.html, хотя редиректа не будет.
/в других дистрах надо логиться под root`ом
В убунте тоже вроде как можно сделать отдельного root-пользователя. Точнее он как бы уже есть, но по умолчанию отключен. Но я пока не заморачивался, мне и sudo хватает.

Все таки поставил новый хост сейчас. Сделал то, что написали, редирект есть, то есть с site.com/test-test.php перекидывает на site.com/test.html. Залил на этот хост Drupal, та же проблема, чистые ссылки опять не работают и не активны в админке :(

/Еще стоит посмотреть error-лог самого Апача, /var/log/apache2/error.log.
С "rewrite" всего 2 строчки:
[Wed Jul 07 20:26:22 2010] [alert] [client 127.0.0.1] /var/www/.htaccess: RewriteEngine must be On or Off
[Wed Jul 07 20:26:22 2010] [alert] [client 127.0.0.1] /var/www/.htaccess: RewriteEngine must be On or Off

Становится все интересней и интересней=) mod_rewrite получается работает. В /var/log/apache2/error.log ничего интересного не обнаружилось?

/Как вариант можно добавить в .htaccess строчку "Options +FollowSymLinks".
Добавил, перезагрузил, эффект тот же, то есть его полное отсутствие.
/В /var/log/apache2/error.log ничего интересного не обнаружилось?
C "rewrite" больше нечего. А так, там очень много строчек... На какие еще стоит обратить внимание?

Стоит, наверно, поиграться с /etc/apache2/sites-available/default, везде None заменить на All, там где в пути стоит просто /, заменить на полный путь /var/www, потом удалить все и вся, оставив только пару необходимых записей... Т.е. такой метод "научного тыка"=) Больше вроде некуда копать.

/На какие еще стоит обратить внимание?
Да просто погуглил, у некоторых в error сваливаются ошибки, содержащие всякие упоминания "rewrite" и "FollowSymLinks", здесь видимо не тот случай.

/везде None заменить на All
Так там же и так везде All стоит
/там где в пути стоит просто /, заменить на полный путь
Тоже, так все и стоит.
/потом удалить все и вся, оставив только пару необходимых записей...
А вот тут поточнее, какие из записей стоит оставить?

/Тоже, так все и стоит.
Вроде самая первая Directory, там путь /, перед Options FollowSymLinks, можно вместо / выставить /var/www.
/А вот тут поточнее, какие из записей стоит оставить?
Точно сказать трудно, могу только догадываться. Сначала, конечно, файл default лучше куда-нибудь скопировать, чтобы было из чего восстанавливать. А там уже удалить все между тегами VirtualHost, оставив только ServerAdmin и DocumentRoot. Отключить/включить сайт, ребутнуть апач. Если не поможет - добавить в файл
Directory />
AllowOverride All
/Directory>
Ребутнуть все. Если не поможет, заменить Directory / на Directory /var/www, не поможет - на Directory /var/www/. Потом постепенно добавлять удаленное. Но это все теория.

/Вроде самая первая Directory, там путь /, перед Options FollowSymLinks, можно вместо / выставить /var/www.
Там уже до этого поменял просто
/файл default лучше куда-нибудь скопировать
Бэкапы наше все =)
Можно конечно попробовать все это сделать, но что-то мне подсказывает, что это не сильно поможет... Все таки думаю, что где-то в настройках, была допущена мной какая-нибудь совсем маленькая оплошность, только вот не известно какая. Так как у всех все работает при стандартных условиях...

/Так как у всех все работает при стандартных условиях
Да, сколько всего не перечитал (в том числе и англ. обсуждения на drupal.org), все решается стандартно. Но хоть выяснили, что mod_rewrite сам по себе работает. Проблема возможно с какой-то опцией (может связано с тем, что все файлы Drupal не в корне лежат, а рассортированы по папкам с произвольной вложенностью).
Можно, конечно, снести весь LAMP и установить по новой на крайний случай.
А так, я сдаюсь. Только если случайно наткнусь на решение, но это маловероятно. У меня все работает, проверить удаленно еще 100500 решений (где-то переставить строчки, где-то добавить опцию...) не представляется возможным.

В любом случае большое спасибо за помощь. А так же за то, что благодаря этому блогу окончательно выбрал Drupal в качестве основной CMS и начал его еще активнее изучать. Если будет желание пообщаться о линуксе, друпале и манимейкерстве, стучитесь в аську (в фоне твиттера, ссылка в подписи), буду рад =)

/В любом случае большое спасибо за помощь.
Аналогично выражаю благодарность. Хоть mod_rewrite немного подучил и конфиги апача, так бы руки не скоро дошли=)
/окончательно выбрал Drupal в качестве основной CMS и начал его еще активнее изучать
И не пожалеете! Сложный, правда. Но на фоне других CMS смотрится более выигрышно, по большому счету у него и конкурентов нет.
/пообщаться о линуксе, друпале и манимейкерстве, стучитесь в аську
Спасибо, возникнут вопросы, обязательно обращусь.

/Сложный, правда.
На самом деле, особой сложности не увидел пока. Поседел меньше недели, все что мне было нужно реализовать для будущего блога и сдл сайта, несмотря на мои не маленькие потребности, настроил без особых проблем, пока правда только на локальном сервере. Вся структура админки теперь кажется очень продуманной и простой, хотя первое время нечего не мог там найти. Так что теперь только Drupal. Самая сложная часть, c которой сейчас разбираюсь, это модуль views. Мне то он особо и не нужен будет в принципе, но для общего развития думаю пригодиться, к тому же возможностей у него, судя по отзывам, очень много. Но сильно уж в нем все запутано, особенно с моими небольшими познаниями английского языка, так что разбираться буду еще долго :)

/Самая сложная часть, c которой сейчас разбираюсь, это модуль views.
Views + CCK эта практически основа Drupal, очень мощные вещи. CCK позволяет делать пользовательские типы контента (не "статья" или "заметка", а к примеру "фильм", "игра" и т.д. со своими полями для ввода информации), а views это по сути просто запросы к БД, можно вытянуть и организовать любые данные. Вкупе с таксономией это дает фактически неограниченные возможности для реализации практически любых идей. Но для простого сайта это конечно все не надо, на этом блоге ни views ни cck не используется. Чем собственно и хороша модульность Drupal, в дистрибутив идет только ядро, а там уже ставишь все остальное по желанию и необходимости.

С CCK уже более менее разобрался, там в принципе не особо сложно. Таксомония совсем проблем не вызвала, наоборот очень удобно с ее помощью организовывать разные типы материалов и создавать сам скелет сайт, а потом уже на основе это скелета выводить то, что нужно, в меню или в html блоках. Почему только многим она кажется неудобно, я так и не понял. А вот с Views наладить "дружеские отношения" пока совсем не получается, но буду пробовать, пока не разберусь.

/почему только многим она кажется неудобно
Наверно просто мало кто начинает сразу с Drupal, в основном переходят с других CMS, в которых чаще всего "папочная" организация контента. Кому-то нравится, а кто-то ничего не поняв возвращается к уже знакомым CMS.
/Views наладить "дружеские отношения" пока совсем не получается
Аналогично до конца не разобрался в views, простые выборки делаю, а до сложных пока не доходил. Ну и надо, конечно, начать читать документацию по views(и по всему остальному), но очень не хочется)

Решение проблемы наконец то было найдено. Надо в .htaccess прописать
*IfModule mod_rewrite.c>
DirectoryIndex index.php
ErrorDocument 404 /404/
Options +Followsymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1
*/IfModule>

* заменить на <

Спасибо за решение) Хотя вопросов все равно куча осталось. Почему не работает на дефолтном htaccess-е, хотя у всех работает "из коробки" (у меня в том числе), что такого в этом новом htaccess, чего нет в дефолтном (ошибок в логах из-за Followsymlinks не было, а DirectoryIndex index.php и так значение по умолчанию вроде как)... Но главное, что работает=)

Просто сегодня ставил сайт на хостинг (в подписи), там тоже чистые ссылки не включились из коробки, знакомый нашел данный вариант и все заработало, как на хостинге, так и на локальном сервере. А почему так...не известно :)

Вдвойне странно, оказывается это еще и воспроизводимо=) Да и хостер какой-то неправильный, ИМХО первым же делом надо проверять корректную работу всех популярных скриптов и CMS с дефолтными настройками, а не заставлять пользователей искать костыли для решение нестандартных проблем.

Наверно это связано с тем, что Drupal в рунете не особо часто используют, хотя на главной странице хостинга указано, что хостинг оптимизирован для работы и с этой кмс тоже %)

*Проблема решилась. Ошибки были из-за того, что использовался не весь дефолтный .htaccess Друпала, а только его часть. При использовании .htaccess из дистрибутива без изменений никаких ошибкок не возникает, все работает идеально.

я вот не пойму в кокае место именно нужно прописывать в файле etc/hosts/ 127.0.0.1 test.my www.test.my. Я пробовал и так и сяк все равно браузер пишет Запрошенный URL не может быть доставлен

mixpeg, в принципе можно в любое место, лично я прописываю после строчек 127.0.0.1 localhost 127.0.1.1 username-desktop (эти записи уже должны быть по умолчанию). После чего, естественно, надо включить сайт и перезагрузить апач. Должно работать.

столкнулся с проблемой: все работает НО при включенном интернете. если отключаюсь то выдает ошибку 105 (не удалось найти сервер). в чем может быть причина?

mmikh, во всех браузерах ошибка? Где-то читал, что в Хроме такое иногда бывает.
А так, если hosts правильный и аналогичная ситуация наблюдается во всех браузерах, то имеет смысл смотреть в сторону DNS, например изменить в /etc/resolv.conf цифры на 8.8.8.8 Точнее заказать не могу, сам с таким не сталкивался, да и что посоветовал возможно далеко от истины=)

да, в firefox та же проблема.
посмотрел лог, и на сколько я понимаю вся соль в этой строчке
[Mon Oct 25 14:51:41 2010] [error] [client 127.0.0.1] File does not exist: /home/mikh/www/favicon.ico
это единственная ошибка.
погуглив както не особо понял при чем здесь фавикон.
есть какие-ниубдь предположения?

Ошибка с фавиконом точно не является причиной, она постоянно появляется, если фавикона нет (посмотрел у себя в логах, тоже таких ошибок куча).
Если после отключения инета Апач не работает, но начинает работать после рестарта, надо все-таки копать в сторону настроек подключения инета, настроек сети и т. д. (в том числе и DNS).

прибегнул к крайним мерам. решил вопрос парой строчек))
sudo apt-get --purge remove apache2 apache2.2-common
sudo apt-get install apache2

спасибо за помощь!
з.ы. отличная статья! сайт в закладки))

И после переустановки Апача все заработало? Странно=) Но главное, что работает=)
/з.ы. отличная статья!
Спасибо=)

Цитата из статьи-
Создадим в каталоге sites-available файл test.my (к слову, назвать его можно как угодно, но так просто легче не запутаться) и откроем его для редактирования.

sudo gedit /etc/apache2/sites-available/test.my

Скопируем в него полностью содержимое файла /etc/apache2/sites-available/default (отрыть для чтения его можно просто двойным кликом) и внесем некоторые изменения.
Далее бла- бла...и далее-

Без этих изменений файл .htaccess в корне нашего сайта будет игнорироваться.

Вместо username, естественно, надо поставить свой логин в системе. После чего закрываем файл с сохранением изменений....

Внимание вопрос!
О каком логине и в какой системе??? идет речь??? Прошу матом не ругать- мало опыта в этом деле. Спасибо автору, на базе этой статье мои первые шаги в адменистрировании ацкой машины.

В контексте

Directory /home/username/sites/test.my/public/

под username подразумевается логин в Ubuntu. Фактически это путь к домашней папке (в папке home в корне должна быть папка юзера, пиктограмма этой папки в последних версиях Ubuntu - домик, вот имя этой папки и есть username).

Спасибо. С usernam ом получилось. Теперь стал на следующем моменте- После того, как база данных создана, переходим в браузере по адресу drupal1.my. Нас должно средиректить на страницу установки drupal1.my/install.php?profile=default. Если редиректа не произошло, то сами переходим по адресу drupal1.my/install.php.

И еще вопрос. Создадим в каталоге sites-available файл test.my (к слову, назвать его можно как угодно, но так просто легче не запутаться) и откроем его для редактирования.
sudo gedit /etc/apache2/sites-available/test.my
Скопируем в него полностью содержимое файла /etc/apache2/sites-available/default

Эту и подобные команды вписывать в- приложения\ стандартные\ терминал???

Пред идущий пост можно удалить, неудачно сформировал вопрос.

Вопрос в следующем-
sudo gedit /etc/apache2/sites-available/test.my Эту команду вводить в приложения\ стандартные\ терминал???

Да, в терминале. У вас еще должен пароль запроситься. Смысл этой команды в том, чтобы открыть файл test.my в текстовом редакторе gedit с правами администратора, чтобы можно было вносить изменения и сохранять их.

drupal1.my/install.php переход в браузере не получается. Пишет следующее- Oops! Google Chrome could not find drupal1.my

А все делали по инструкции? Попытайтесь еще раз отключить/включить сайт и перезагрузить апач.

В /etc/apache2/sites-available/test.my создан файл test.my, скопировано из default и скоректировано все согластно статьи. В файл etc/hosts добавлены данные. Вот данные из терминала- igor@linuxdesktop:~$ a2ensite test.my
Site test.my already enabled
igor@linuxdesktop:~$ sudo/etc/init.d/apache2 start
bash: sudo/etc/init.d/apache2: Нет такого файла или каталога
igor@linuxdesktop:~$ sudo /etc/init.d/apache2 restart
[sudo] password for igor:
* Restarting web server apache2 Warning: DocumentRoot [/home/igor/sites/test.my/public] does not exist
... waiting Warning: DocumentRoot [/home/igor/sites/test.my/public] does not exist
[ OK ]
igor@linuxdesktop:~$ sudo a2dissite test.my
Site test.my disabled.
Run '/etc/init.d/apache2 reload' to activate new configuration!
igor@linuxdesktop:~$ sudo a2ensite test.my
Enabling site test.my.
Run '/etc/init.d/apache2 reload' to activate new configuration!
igor@linuxdesktop:~$ sudo /etc/init.d/apache2 restart
* Restarting web server apache2 Warning: DocumentRoot [/home/igor/sites/test.my/public] does not exist
... waiting Warning: DocumentRoot [/home/igor/sites/test.my/public] does not exist

В чем может быть причина?. Почему система не видит сайт???

Браузер на запрос localhost реагирует адекватно

Что-то ошибок куча в терминале=)
igor@linuxdesktop:~$ sudo/etc/init.d/apache2 start
bash: sudo/etc/init.d/apache2: Нет такого файла или каталога
После sudo надо пробел поставить.

waiting Warning: DocumentRoot [/home/igor/sites/test.my/public] does not exist Папка должна существовать. Вы забыли создать папку "public" или в терминале ее просто не видно?

Папка public есть, каким образом ее может не видеть система?

На другом системнике установил LUNPу с помощью команды-
sudo apt-get install apache2 mysql-server php5 php5-mysql phpmyadmin браузер на запрос localhost- It work! А при замене в файле пхп на <?php
phpinfo();
?>
выдает версию пхп с описанием. Но localhost/phpmyadmin ссылка не работает. В чем может проблема?

Папка должна существовать. Вы забыли создать папку "public" или в терминале ее просто не видно? Открываю свойства папки public- владелец root, доступ к папке создание и удаление файлов, группа root, доступ к папке доступ к файлам.

Папка public есть, каким образом ее может не видеть система? Странно, почему тогда пишет
Warning: DocumentRoot [/home/igor/sites/test.my/public] does not exist
раз папка существует. Пока эта проблема не решится, дальше копать не имеет смысла.

Но localhost/phpmyadmin ссылка не работает. С ходу не ответить. Не работать может по десятку причин.

подскажите как быть с правами на создаваемые апачем/пхп файлы в домашних каталогах пользователей? ведь они же создаются от имени пользователя, от которого запущен апач. соответственно пользователь, в чьем каталоге создаются эти файлы не может получить к ним доступа. а права может сменить только рут или по крону запускать скрипт на том же пхп, который будет менять права.

Хм... Сам особо не вижу в этом проблемы, если вдруг надо удалить/отредактировать файлы, к которым не имею как пользователь доступа, логинюсь под рутом. А так, изначально назначайте при создании файлов/папок права 777, если хотите чтобы доступ к ним имели все пользователи.

Ну или если речь не о всех возможных пользователях, а только об одном, можно Апач от него попытаться запускать. Сам не пробовал :) На локалхосте Апач крутится от пользователя www-data.

права на полный доступ выставлять нельзя, ибо нужно разделить права доступа. а если несколько пользователей, и у каждого свои виртуальные хосты. возникает куча проблем. как их хостеры решают? может попадались решения?

А, понял. Добавить всех пользователей в одну группу с Апачем и назначать права rwxrwxr-- тоже, наверно, не вариант.

Ничем, к сожалению, помочь не могу, слаб в администрировании. Здесь только гуглить, видимо, по запросам "shared hosting apache user"/"apache different user permissions"/"apache multiple users" и прочим.

http://unix.stackexchange.com/questions/30879/what-user-should-apache-and-php-be-running-as-what-permissions-should-var-www
http://superuser.com/questions/316705/running-apache-as-a-different-user
http://articles.slicehost.com/2007/9/18/apache-virtual-hosts-permissions
http://httpd.apache.org/docs/current/suexec.html

....

Хотя может это все не то, но вроде похоже =)