Виртуальные хосты Apache – Отображение различных путей одного домена на разные сайты.

Вопрос или проблема

Я запускаю Apache/2.4.41 (Ubuntu)

Я хочу использовать только одно доменное имя.

Я хотел бы сопоставить разные сайты с разными путями после доменного имени.

Например:

mydomain.com/test001 сопоставляется с /var/www/test001/public

mydomain.com/test002 сопоставляется с /var/www/test002/public

Я уже пробовал множество различных конфигураций виртуальных хостов, но ни одна из них не сработала.

поэтому сейчас я пытаюсь сопоставить mydomain.com/test002 с /srv/public, как ниже:

Alias /test002 /srv/test002/public_html

<Directory /srv/test002 /public_html>

   Order Allow,Deny

   Allow from all

   Options FollowSymLinks

</Directory>

первый сайт работает, но индексная страница второго сайта работает только, и если я попробую перенаправить на другую страницу, он выдаст ‘404 страница не найдена’

.htaccess второго сайта:

RewriteEngine On

RewriteBase /test002/

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule !.(js|css|eot|svg|ttf|woff|woff2|map)$ index.php [L]

RewriteCond $1 !^(index\.php|assets)

Это очень странно, я работал над этим весь день и решения пока нет, и не смог найти ничего полезного в интернете.

может кто-нибудь помочь, пожалуйста?

Я решил проблему, добавив в опции в каталоге:

Options +Indexes +followSymLinks

так это выглядит следующим образом:

<Directory /srv/test002/public_html>


   Order Allow,Deny


   Allow from all


   Options +Indexes +followSymLinks


</Directory>

Ответ или решение

Настройка виртуальных хостов Apache является важной задачей для управления многими сайтами на одном сервере, особенно когда работаем с одним доменным именем и различными путями. Ваша проблема связана не только с конфигурацией Apache, но и с правильной настройкой перенаправления в файлах .htaccess и корректным указанием необходимых директив для доступа к директориям.

Теория

Виртуальные хосты Apache позволяют настраивать сервер для обслуживания нескольких доменных имен и путей с единого IP-адреса. Одним из способов реализации вашей задачи является использование директивы Alias, которая позволяет сопоставлять URL-путь с локальной директорией сервера. Дополнительно необходимо настроить права доступа через директиву <Directory>, чтобы Apache мог правильно обрабатывать запросы и позволять доступ к необходимым файлам.

Пример

В вашей текущей конфигурации вы пытаетесь сопоставить путь /test002 с локальной директорией /srv/test002/public_html. Важно убедиться, что все необходимые параметры пути настроены корректно, а также проверить, что все необходимые модули Apache (такие как mod_rewrite) активны. Ваша конфигурация должна выглядеть примерно следующим образом:

  1. Использование директивы Alias для сопоставления URL с директорией:
Alias /test002 /srv/test002/public_html
  1. Настройка прав доступа в директиве <Directory>:
<Directory /srv/test002/public_html>
   Options +Indexes +FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>

Обратите внимание на следующие моменты:

  • Options +Indexes +FollowSymLinks включает индексацию и разрешает использование символьных ссылок. Это важно для правильной работы сайта.
  • AllowOverride All позволяет использовать файлы .htaccess для переопределения конфигурации в указанных директориях. Это особенно важно для работы с mod_rewrite.
  • Require all granted заменяет устаревшую директиву Order Allow,Deny и более точно контролирует доступ к директории.

Применение

Теперь перейдем к применению этих настроек и исправлению возможных проблем:

  1. Убедитесь, что у вас активирован модуль mod_alias, который отвечает за работу директив Alias. Командой sudo a2enmod alias можно активировать его, если он еще не включен.

  2. Проверьте статус модуля mod_rewrite, так как от его активности зависит работа многих правил в .htaccess. Для этого выполните sudo a2enmod rewrite.

  3. После внесения всех изменений перезапустите Apache: sudo systemctl restart apache2.

  4. Рассмотрим влияние вашего .htaccess:

Ваш .htaccess для второго сайта выглядит следующим образом:

RewriteEngine On
RewriteBase /test002/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|css|eot|svg|ttf|woff|woff2|map)$ index.php [L]
RewriteCond $1 !^(index\.php|assets)

Этот код настроен так, что все запросы, которые не соответствуют существующим файлам или директориям, перенаправляются на index.php. Если у вас возникают ошибки 404 при попытке обращения к другим страницам, убедитесь, что ваш index.php корректно обрабатывает маршруты и пути для URL, запрашиваемые клиентом.

Также убедитесь, что в директории /srv/test002/public_html присутствует файл index.php и в нем настроена маршрутизация для обработки всех запросов. Если используете фреймворк или CMS, убедитесь, что корневая маршрутизация настроена правильно.

Заключение

Ваша проблема скорее всего связана с основной конфигурацией Apache и модулем mod_rewrite. Убедитесь в правильности указанных выше настроек и соответствии вашего .htaccess требованиям вашего приложения. Если проблемы не исчезнут, проверьте логи Apache, обычно находящиеся в /var/log/apache2/error.log, для поиска более детальной информации о возникших ошибках.

Следование этим рекомендациям должно помочь вам решить проблему с отображением страниц и корректным сопоставлением путей для вашего домена.

Оцените материал
Добавить комментарий

Капча загружается...