目錄不存在時的別名
我有一堆客戶,他們有不同的網站設計,但都在同一個後端 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手冊中的這一部分,它描述了一個適合您的案例的場景
我可以想到 apache 中的 2 個選項,然後第 3 個選項是退回到 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
使用 mod_perl 有條件地選擇帶有 inline-perl 節的別名
使用 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)