переписать apache для назначения папок доменам

переписать apache для назначения папок доменам

Пожалуйста, укажите мне правильное направление.

Я использую .htaccess для настройки доменов на своем сервере.

Мне нужно, чтобы domain.com получил доступ к файлам из папки /domain.com/*. Если файл не существует, загрузите /domain.com/index.php и domain.com/images/image.jpg должен загрузить файл: /domain.com/images/image.jpg

Во-первых, он должен загружать все без отправки браузеру уведомлений 302 «файл перемещен».

Спасибо за вашу помощь!

решение1

Если у вас много доменов или даже всего несколько доменов, но все они имеют более или менее одинаковую конфигурацию, то это как раз та ситуация, котораядинамический массовый виртуальный хостингсоздано для. Что-то вроде этого будет в вашем httpd.confфайле (или в файле, который включен в httpd.conf):

UseCanonicalName Off
VirtualDocumentRoot /var/www/%0/htdocs
ErrorLog /var/www/logs/error_log
CustomLog /var/www/logs/access_log combined

Я бы также предложил

DirectoryIndex index.php

для загрузки index.phpфайла в каталог, если клиент не указал имя файла.

решение2

Вам следует создать виртуальный хост для каждого домена, который вы хотите сопоставить с путем к файлу, и указать DocumentRoot каждого vhost для фактического пути в файловой системе. Затем вам нужно убедиться, что у вас есть DEFAULT vhost, чтобы все остальные запросы для доменов, которые не настроены, использовали DEFAULT vhost. Наконец, вам нужно создать пользовательский обработчик ошибок 404, чтобы, если запрашиваемый файл не существует, он обслуживал альтернативное содержимое. Вам нужно будет создать php с именем custom_404.php, который отображает общее сообщение и ваш /images/image.png.

# Default Domain (Undefined domains will fall back to this)
<VirtualHost *:80>
    ServerAlias www.defaultdomain.com
    DocumentRoot /var/www/default/htdocs
    ErrorDocument 404 /custom_404.php
    ErrorLog /var/www/default/logs/error_log
    CustomLog /var/www/default/logs/access_log combined
</VirtualHost>

# domain1.com
<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias www.domain1.com
    DocumentRoot /var/www/domain1.com/htdocs
    ErrorDocument 404 /custom_404.php
    ErrorLog /var/www/domain1.com/logs/error_log
    CustomLog /var/www/domain1.com/logs/access_log combined
</VirtualHost>

# domain2.com
<VirtualHost *:80>
    ServerName domain2.com
    ServerAlias www.domain2.com
    DocumentRoot /var/www/domain2.com/htdocs
    ErrorDocument 404 /custom_404.php
    ErrorLog /var/www/domain2.com/logs/error_log
    CustomLog /var/www/domain2.com/logs/access_log combined
</VirtualHost>

Надеюсь это поможет!

-Кевин

решение3

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

<VirtualHost *:80>
    ServerName example.net
    ServerAlias www.example.net
    ServerAdmin [email protected]
    DocumentRoot /var/www/vhosts/www.example.net/html
    ErrorLog /var/www/vhosts/www.example.net/logs/errors.log
    Customlog /var/www/vhosts/www.example.net/logs/access.log combined

</VirtualHost>

Поместите этот файл в /etc/httpd/conf.d/ и назовите его, например, vhost_example.net.conf

И затем добавьте в /etc/httpd/conf/httpd.conf, например, последнюю строку

Включить /etc/httpd/conf.d/vhost_example.net.conf

(или просто включите /etc/httpd/conf.d/*.conf ) И в файле httpd.conf не забудьте сделать эту строку раскомментированной

ИмяVirtualHost *:80

Связанный контент