Directory

目錄不存在時的別名

  • April 23, 2012

我有一堆客戶,他們有不同的網站設計,但都在同一個後端 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
  1. 使用 mod_perl 有條件地選擇帶有 inline-perl 節的別名

  2. 使用 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

引用自:https://serverfault.com/questions/382161