Я пытаюсь сопоставить несколько поддоменов с каталогами в моем ROOT, используя .htaccess (подходит ли для этого слово «карта»?)
Сервер использует Plesk, с которым я не особо знаком (cPanel справился бы с этим автоматически). Все поддомены были добавлены как «Псевдонимы домена», поэтому все, что мне нужно сделать, это указать правильный каталог.
например: 1. i.domain.com -> domain.com/i/ 2. js.domain.com -> domain.com/js/ 3. css.domain.com -> domain.com/css/
Я пробовал много фрагментов, которые нашел в Google, в частности Stack Overflow. Это код, который мне ближе всего, работая для (1), но по необъяснимым причинам терпящий неудачу для (2) + (3), по-прежнему указывая на ROOT, не глядя в каталог.
RewriteCond %{HTTP_HOST} ^i\.domain\.co\.uk$ [NC]
RewriteCond %{HTTP_HOST} ^js\.domain\.co\.uk$ [NC]
RewriteCond %{HTTP_HOST} ^css\.domain\.co\.uk$ [NC]
RewriteRule (.*) %1/$1 [L]
Признаюсь, я не особо разбираюсь в .htaccess или в том, как работает DNS, PHP - моя игра.
Любая помощь, очень приветствуется.
Что ж, Plesk работает по-другому, поэтому вам нужно делать что-то, как в Plesk;)
Корень документа субдомена в Plesk будет выглядеть примерно так:
/var/www/vhosts/domain.com/subdomains/subdomain/httpdocs
Как и в вашем вопросе, чтобы указать a.domain.com на domain.com/a, вам не нужен .htaccess. Просто измените DocumentRoot вашего субдомена a.domain.com, указывающего на /var/www/vhosts/domain.com/httpdocs/a. Для этого вам нужно добавить vhost.conf в каталог conf поддомена с новыми настройками DocumentRoot.
Создайте файл с именем vhost.conf со следующим содержанием,
DocumentRoot /var/www/vhosts/domain.com/httpdocs/a
Теперь загрузите этот файл в /var/www/vhosts/domain.com/subdomains/subdomain/conf папка.
Теперь выполните следующую команду, чтобы включить пользовательский conf вместе с другими включениями httpd.
/usr/local/psa/admin/bin/websrvmng -a
Перезапустите apache и убедитесь, что субдомен теперь обслуживает страницы из правильного места.
PS: Иногда версия Plesk имеет значение (для команд, которые вы выполняете), поэтому не стесняйтесь спрашивать, возникнут ли у вас проблемы с ее настройкой.
Спасибо за ваш ответ SparX - я уверен, что это правильно, вы четко знаете свое дело.
Мой хост посоветовал мне не использовать стандартную структуру каталогов поддоменов в Plesk, так как мне нужны разрешения RWX для большинства поддоменов из основного домена document_root.
Это означало, что мне пришлось удалить почти все ограничения open_basedir, указанные выше. /var/www/vhosts/domain.com/. Я не осознавал, что вызываю серьезные проблемы с безопасностью - наивность нас, разработчиков PHP!
Поэтому они посоветовали мне добавить свои поддомены в «псевдонимы домена», переместить каталоги в document_root основного домена и использовать .htaccess для перезаписи запросов.
После полных выходных выдергивания волос я нашел этот ответ в Stack overflow: https://stackoverflow.com/questions/4593978/redirecting-to-multiple-virtual-subdomains-using-htaccess
Это привело меня к использованию следующего в моем основном домене .htaccess:
# Internal rewrite for the image subdomain
# - Match the subdomain exactly
RewriteCond %{HTTP_HOST} ^i\.mydomain\.com$
# - Check to see if the rewrite already happened (prevent
# infinite loop of internal rewrites)
RewriteCond %{REQUEST_URI} !^/i(/.*|$)
# - Rewrite the URL to the subdirectory
RewriteRule ^(.*) /i/$1 [L]
Это позаботилось о i.mydomain.com, поэтому я просто скопировал его для c.domain.com и js.domain.com