У меня есть несколько клиентов, у которых разный дизайн сайтов, но все они работают на одной и той же серверной CMS. Все они имеют общую тему администратора, которая находится в /home/public/skins/admin
- которому у каждого клиента есть псевдоним.
Он работает нормально, но теперь может быть два или больше клиентов с одинаковым дизайном. Так что имеет смысл перенести дизайн на /home/public/skins/design
.
Я мог бы использовать простой псевдоним /skins/ /home/public/skins/
но для некоторых пожилых клиентов /skins/
папка по-прежнему должна быть доступна в том виде, в котором она есть в настоящее время - поскольку каждый сайт, использующий одну и ту же CMS, включает один и тот же файл конфигурации псевдонима, было бы беспорядочно держать одни клиенты с одним параметром, а другие - с другим набором.
Итак, мой вопрос: могу ли я установить псевдоним для просмотра /home/public/skins
папка, только если фактическая папка не существует. Думаю, как каскадные структуры каталогов.
/skins/design
- если существует, ничего не делать, и пусть стандартный каталог сделает всю работу. в противном случае посмотрите на /home/public/skins
Я открыт для использования символических ссылок, но мне нравится иметь псевдонимы для простоты использования.
Спасибо
Обновление: я только что заметил этот раздел в руководстве для mod_rewrite, который в значительной степени описывает сценарий, соответствующий вашему варианту использования
Я могу придумать 2 варианта в apache, а третий - вернуться к сценарию bash для условной генерации правильных псевдонимов.
1) Очевидно, лучший способ - использовать mod_rewrite для условной перезаписи запроса.
Моя первая идея была бы довольно жесткой уловкой, чтобы перехватить любые запросы на отсутствие файлов и перенаправить их в расположение пути к файлу по умолчанию, например так;
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-d
RewriteRule ^/skins/(.*)$ /home/public/skins/admin/$1
2) используйте mod_perl для условного выбора псевдонимов с помощью строф inline-perl
3) используйте bash
for foo in user1 user2 user3; do
[ ! -d /home/someuser/skins -a ! -L /home/someuser/skins ] && ln -s /home/public/skins /home/someuser/skins
done
(есть примечание о флагах подстановки, если вы хотите смешать флаги mod_alias и mod_rewrite в документах ...http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule)