如果目录不存在则使用别名

如果目录不存在则使用别名

我有很多客户,他们的网站设计各不相同,但都运行在同一个后端 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

相关内容