Как настроить поддомен на папку сайта

    Задача перенаправления поддомена (например, test.site.com) на конкретную папку основного домена (например, site.com/test) часто возникает при разработке и тестировании проектов. Это позволяет изолировать версии сайта или отдельные разделы, сохраняя единую структуру хостинга. В этой статье мы рассмотрим универсальное решение, которое работает для любого веб-сервера (Apache, Nginx, IIS), без привязки к конкретному ПО.

    Принцип работы и общая схема

    Независимо от типа веб-сервера, логика одинакова: поддомен test.site.com должен обращаться к тому же корневому каталогу, что и основной домен, но при этом загружать файлы из подпапки test. Это достигается с помощью правил перезаписи URL (rewrite) или конфигурации виртуальных хостов. Ключевой момент - корректная обработка путей, чтобы ссылки внутри поддомена не ломались.

    Настройка на Apache (через .htaccess)

    Apache - самый популярный веб-сервер, и для него достаточно добавить несколько строк в файл .htaccess в корне домена site.com. Убедитесь, что модуль mod_rewrite включён.

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^test\.site\.com$ [NC]
    RewriteRule ^(.*)$ /test/$1 [L]

    Это правило проверяет, что запрос пришёл на поддомен test.site.com, и перенаправляет его в папку /test/, сохраняя путь после домена. Например, запрос test.site.com/page.html откроет файл site.com/test/page.html.

    Настройка на Nginx (через server block)

    Для Nginx создайте отдельный server block для поддомена или используйте условие внутри основного блока. Рекомендуется второй вариант для простоты.

    server {
        listen 80;
        server_name site.com test.site.com;
    
        if ($host = test.site.com) {
            rewrite ^/(.*)$ /test/$1 last;
        }
    
        root /var/www/site;
        index index.php index.html;
    }

    Важно: в Nginx использование if в контексте location может быть ненадёжным, поэтому для продакшена лучше создать отдельный server block с директивой root /var/www/site/test;. Однако приведённый выше код подходит для быстрого тестирования.

    Настройка на IIS (через URL Rewrite)

    В IIS используется модуль URL Rewrite. Добавьте правило в файл web.config корневого сайта.

    <rewrite>
        <rules>
            <rule name="Subdomain to folder" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^test\.site\.com$" />
                </conditions>
                <action type="Rewrite" url="/test/{R:0}" />
            </rule>
        </rules>
    </rewrite>

    Это правило сработает для всех запросов на поддомен test.site.com, перенаправляя их в папку /test/.

    Важные нюансы и рекомендации

    • Относительные ссылки: если в папке test используются относительные пути (например, /css/style.css), они будут корректно подгружаться, так как браузер видит поддомен. Но если ссылки абсолютные (с site.com), они могут указывать на основной домен - используйте относительные пути или переменные среды.
    • PHP и другие скрипты: при использовании rewrite сервер обрабатывает файлы в папке test так, как будто они находятся в корне поддомена. Это может повлиять на работу скриптов, если они используют $_SERVER['DOCUMENT_ROOT'] - для поддомена он останется корнем основного сайта. Исправляется установкой SetEnv DOCUMENT_ROOT /var/www/site/test (для Apache) или аналогичной настройкой.
    • DNS-записи: не забудьте создать A-запись или CNAME для поддомена test.site.com, указывающую на IP-адрес сервера. Без этого настройка не сработает.

    Проверка и отладка

    После настройки перейдите по адресу test.site.com - должно открыться содержимое папки test. Если возникает 404 ошибка, проверьте: включён ли модуль rewrite, корректно ли указаны пути, и доступны ли файлы в целевой папке. Для Apache можно временно включить логирование rewrite (RewriteLogLevel 9), чтобы увидеть процесс обработки.

    Таким образом, настройка поддомена на папку сайта - задача, решаемая для любого веб-сервера с помощью правил перезаписи. Выберите подходящий метод под вашу платформу и следуйте инструкции, чтобы изолировать тестовые версии или разделы проекта.

    Часто задаваемые вопросы