Назад | Перейти на главную страницу

Псевдоним, если каталог не существует

У меня есть несколько клиентов, у которых разный дизайн сайтов, но все они работают на одной и той же серверной 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)