Apache и поддомены?

Привет всем, выручайте!
Имеется Apache на Linux и такая структура каталогов:
/var/www/домен/htdocs
Необходимо что бы сам домен хранился в вышеуказанном каталоге, а все поддомены хранились в каталоге домена, на уровне папки htdocs. А так же работало автоматическое добавление субдомена при создании новой папки. Как такое организовать?
На данный момент настроено так и приходится вручную всегда добавлять новый:
NameVirtualHost *:80
 
<VirtualHost *:80>
        ServerAdmin site@yandex.ru
        ServerName site.ru
        ServerAlias www.site.ru
        DocumentRoot /var/www/site.ru/htdocs
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
 
<VirtualHost *:80>
        ServerAdmin site@yandex.ru
        ServerName test.site.ru
        ServerAlias www.test.site.ru
        DocumentRoot /var/www/site.ru/test
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ну и файл hosts на данный момент

127.0.0.1 localhost
192.168.1.5 WS01
192.168.1.5 site.ru
192.168.1.5 *.site.ru
  • Вопрос задан
  • 3024 просмотра
Решения вопроса 1
@alterak Автор вопроса
Сделал так и все заработало норм. Естественно, предварительно активировав mod_vhost_alias И не нужно ничего городить.
<VirtualHost *:80>
        ServerAdmin  site@yandex.ru
        ServerName   site.ru
        ServerAlias  www.site.ru
        DocumentRoot /var/www/site.ru/htdocs

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:80>
        ServerAdmin site@yandex.ru
        ServerName site.ru
        ServerAlias *.site.ru

        UseCanonicalName Off
        VirtualDocumentRoot /var/www/site.ru/%-3

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Inkognitoss
@Inkognitoss
Full-stack разработчик.
Смотрите, можно реализовать с помощью sh скрипта. Я немного автоматизировал в моём случае не нужно было hosts прописывать, могу поделиться (но вам следует доработать, если я вообще верно понял вас)

я использую отдельную папку для таких конфигов (httpd-add) все файлы c расширением conf я инклюдю внутри классического конфига апача

выполнив что-то типа sudo /etc/httpd/httpd-add/httpd-add.sh newsite
я сразу получаю папку в нужной директории и конфиг
#!/bin/bash
if [ -n "$1" ]
then
    if ! [ -d /var/www/$1/ ]
    then
        echo "Message: Create directory ' /var/www/$1/ '"
        mkdir /var/www/$1/
 
        if [ -d /var/www/$1/ ]
            then
                echo "Successfull: create directory ' /var/www/$1/ '"
                echo "<?php echo 'hello world. site automaticaly added';?>" > /var/www/$1/index.php
                chown -R apache:apache /var/www/$1/
            else
                echo "Error: i cat't add directory ' /var/www/$1/ '"
        fi
 
    if ! [ -f /etc/httpd/httpd-add/$1.conf ]
    then
        echo "Create config file /etc/httpd/httpd-add/$1.conf"
 
STRING="<VirtualHost *:80>
\tServerAdmin admin@site.ru
\tDocumentRoot /var/www/$1
\tServerName $1.site.ru
\tErrorLog logs/$1-error.log
\tLogFormat \"%h %l %u %t \\\"%r\\\" %>s %b\" common
\tCustomLog logs/$1-access.log common
\t<Directory \"/var/www/$1\">
\t\tAllowOverride all
\t\tOrder allow,deny
\t\tAllow from all
\t</Directory>
</VirtualHost>"
     
        echo -e "$STRING" > /etc/httpd/httpd-add/$1.conf
        if  [ -f /etc/httpd/httpd-add/$1.conf ]
        then
            echo -e "Successfull: add configuration:\n$STRING"
        else
            echo "Error: i can't add configuration file to '/etc/httpd/httpd-add/$1.conf ' "
        fi
    else
        echo "Error: config file '/etc/httpd/httpd-add/$1.conf ' exits"
    fi
    else
        echo "Error: directory ' /var/www/$1/ ' exist"
    fi
else
    echo 'No argument!'
fi
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы