我有一些客户端有不同的网站devise,但都运行在相同的后端CMS。 他们都有一个共同的pipe理主题,位于/home/public/skins/admin
– 每个客户端都有一个别名。
它工作正常,但现在可以有两个或更多的客户,将共享相同的devise。 所以将devise移动到/home/public/skins/design
有意义的。
我可以使用/skins/ /home/public/skins/
一个简单的别名,但是对于一些较老的客户端, /skins/
文件夹仍然需要像目前一样可访问 – 因为使用相同CMS的每个站点都包含相同别名configuration文件,将保持一些客户端使用一个设置和其他一些不同的设置是凌乱的。
所以,我的问题是:只有当实际文件夹不存在时,才可以设置别名来查看/home/public/skins
文件夹。 就像级联的目录结构,我猜。
/skins/design
– 如果存在,什么也不做,并让标准目录来完成工作。 否则看看/home/public/skins
我打开使用符号链接,但我喜欢有别名的易用性。
谢谢
更新:我刚刚注意到mod_rewrite 手册中的这个部分,它描述了几乎适合你的用例的场景
我可以想到在Apache的2个选项,然后第三个是退回到一个bash脚本有条件地生成正确的别名。
1)最好的方法是使用mod_rewrite有条件地重写请求。
我的第一个想法将是一个相当残酷的捕获所有,捕捉任何文件丢失的请求,并redirect到默认的文件path位置像这样;
RewriteEngine On RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-d RewriteRule ^/skins/(.*)$ /home/public/skins/admin/$1
2)使用mod_perl有条件地select带有内联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
(有关于replace标志的说明,如果你想混合mod_alias和mod_rewrite标志中的文档… http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule )