Я прихожу из IIS, и настраивать там виртуальные каталоги очень легко. Вы просто щелкаете правой кнопкой мыши и добавляете «виртуальный каталог», указывающий на любой путь, который вам нравится. Этот относительный путь отображается в браузере при просмотре сайта.
Как сделать то же самое с Apache? Символические ссылки меня пугают, потому что каскадное удаление выполняется. Есть ли лучший способ создания виртуальных каталогов в Apache? Я использую MAMP для Mac, который использует apache2.
Использовать Alias
директива в файле конфигурации Apache.
Alias /virtual-dir /var/www/foo
Дополнительно, rm -r
не пересекает символические ссылки и не будет проходить через них.
Если это защищенный сервер, каталог «Псевдоним» также должен быть указан в конфигурации VirtualHost 443.
<VirtualHost *:443>
...
Alias /virtual-dir /var/www/foo
</VirtualHost>
Если вы указываете нескольким доменам один и тот же общедоступный html-каталог, а фактическое содержимое находится за пределами общедоступного html (веб-корня), вы можете сделать это в два этапа:
1) перепишите каталог для каждого домена, например
<VirtualHost 127.0.0.1:80>
ServerName host_one.ca
RewriteEngine On
RewriteRule "/?images(.*)" "/www/shared/host_one/images/$1" [NC]
</VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerName host_two.ca
RewriteEngine On
RewriteRule "/?images(.*)" "/www/shared/host_two/images/$1"
</VirtualHost>
2) Затем добавьте символические ссылки (как вариант, псевдоним)
ln -s /shared/host_one/images /www/html/images/host_one
ln -s /shared/host_two/images /www/html/images/host_two
Просто будь осторожен. Доступ к изображениям host_two можно получить через host_one: domain_one.ca/images/host_two/{filename}
Если вы не добавите дополнительные правила, которые НЕ будут удалены в текущем каталоге хоста. Для VirtualHost host_one (я сделал не подтвердите, работает ли это правило):
# prevent showing content from other hosts
RewriteRule "/?images/!(host_one/.*)" /404 [NC,L]