PHP программист (xyzya) wrote,
PHP программист
xyzya

Category:

Автоматическое создание субдоменов в Apache2

Мне приходится работать с движками многих сайтов, постоянно появляются для обслуживания новые, и уходят в архивное забвение старые. Поэтому часто добавляются новые блоки виртуалхостов в конфиге Апача, и сам конфиг уже изрядно раздулся.
Появилась минутка свободного времени, и я решил навести порядок в этом безобразии. Захотелось сделать так, чтобы для добавления нового сайта, было достаточно создать директорию, и прописать новый хост в /etc/hosts, а не повторять каждый раз монотонную операцию добавления и редактирования блоков <VirtualHost>.
По сути теперь у меня есть основной домен, и к нему автоматически добавляются субдомены, по которым и грузятся разные сайты с локальной машины.

Для начала, конечно, необходимо установить сам Апач. (На моём рабочем компьютере стоит Ubuntu 10.10, поэтому весь процесс рассказываю для него).

sudo apt-get install apache2

Далее подключаем mod_rewrite (Он понадобится для автоматического создания субдоменов).

sudo a2enmod rewrite

Эта команда, по сути, создает символическую ссылку в /etc/apache2/mods-enabled/ на /etc/apache2/mods-available/rewrite.load, поэтому сделать это можно и любым другим способом.
Перезагружаем Апач.

sudo /etc/init.d/apache2 restart

Итак, мы имеем установленный Apache2 с mod_rewrite. Теперь надо сконфигурировать его.
Для начала выбираем себе директорию, где будут лежать наши папки с сайтами.
Пускай это будет /www.

Далее открываем /etc/apache2/sites-available/default

sudo mcedit /etc/apache2/sites-available/default

Куда пишем что-то типа:

<VirtualHost *:80>
ServerName xyz
DocumentRoot /www
ServerAlias *.xyz
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.xyz$
RewriteCond %{HTTP_HOST} ^((.*)\.)xyz$
RewriteRule ^/(.*) /%2/$1

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>

где, xyz — это мой основной домен. Его же и надо прописать в /etc/hosts

127.0.0.1 xyz

Перезагружаем еще раз веб-сервер

sudo /etc/init.d/apache2 restart

и пробуем в любом браузере открыть http://xyz/. У нас должен открыться листинг директории /www.

Теперь, чтобы добавить еще один сайт на наш локальный сервер надо создать в директории /www любую другую директорию, например, /www/site1, дописать домен site1.xyz в /etc/hosts

127.0.0.1 xyz site1.xyz

и теперь в браузере должен загрузиться наш сайт по адресу http://site1.xyz/.

Вот и всё.

Это сообщение опубликованно в моём основном блоге. Вы можете комментировать как и тут, так и напрямую под сообщением в блоге.
Tags: apache, php, ubuntu
Subscribe

  • Jetbrains PhpStorm 9 released!

    Это сообщение опубликованно в моём основном блоге. Вы можете комментировать как и тут, так и напрямую под сообщением в блоге.

  • Fatal error: Call-time pass-by-reference has been removed

    Каждое новое обновление серверного программного обеспечения — это упражнение из области «и хочется, и колется…». Так и я решил…

  • fpdf (ufpdf) «fatal error: allowed memory size of…»

    В текущем проекте появилась необходимость делать экспорт некоторых документов в PDF. Один из лучших классов, существующих на сегодняшний день…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments