Пожалуйста, укажите мне правильное направление.
Я использую .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