我有很多客户,他们的网站设计各不相同,但都运行在同一个后端 CMS 上。它们都共享一个位于的公共管理主题/home/public/skins/admin
- 每个客户都有一个别名。
它运行良好,但现在可能有两个或多个客户端共享相同的设计。因此将设计移至 是有意义的/home/public/skins/design
。
我可以使用一个简单的别名,/skins/ /home/public/skins/
但是对于一些较旧的客户端,该/skins/
文件夹仍然需要像当前一样可访问 - 因为使用相同 CMS 的每个站点都包含相同的别名配置文件,让一些客户端使用一个设置而其他客户端使用不同的设置会很混乱。
/home/public/skins
所以,我的问题是:我是否可以设置一个别名,以便仅在实际文件夹不存在时才查看该文件夹。我猜就像级联目录结构一样。
/skins/design
- 如果存在,则不执行任何操作,让标准目录执行工作。否则查找/home/public/skins
我愿意使用符号链接,但是为了易于使用,我喜欢使用别名。
谢谢
答案1
更新:我刚刚注意到手册中的这一部分对于 mod_rewrite 来说,它描述了一个非常适合你的用例的场景
我可以想到 apache 中的 2 个选项,然后第三个选项是回退到 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)