Вопрос или проблема
Я запускаю 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) активны. Ваша конфигурация должна выглядеть примерно следующим образом:
- Использование директивы
Alias
для сопоставления URL с директорией:
Alias /test002 /srv/test002/public_html
- Настройка прав доступа в директиве
<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
и более точно контролирует доступ к директории.
Применение
Теперь перейдем к применению этих настроек и исправлению возможных проблем:
-
Убедитесь, что у вас активирован модуль
mod_alias
, который отвечает за работу директивAlias
. Командойsudo a2enmod alias
можно активировать его, если он еще не включен. -
Проверьте статус модуля
mod_rewrite
, так как от его активности зависит работа многих правил в.htaccess
. Для этого выполнитеsudo a2enmod rewrite
. -
После внесения всех изменений перезапустите Apache:
sudo systemctl restart apache2
. -
Рассмотрим влияние вашего
.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
, для поиска более детальной информации о возникших ошибках.
Следование этим рекомендациям должно помочь вам решить проблему с отображением страниц и корректным сопоставлением путей для вашего домена.