
在進行應用程式重寫時,我想保留舊的應用程式 webroot 檔案作為未找到新檔案時的後備。
有2個應用:
<VirtualHost *:80>
ServerName legacy.dev
DocumentRoot /www/legacy/webroot
</VirtualHost>
<VirtualHost *:80>
ServerName new.dev
DocumentRoot /www/new/webroot
</VirtualHost>
如何設定 new.dev VirtualHost 來檢索 DocumentRoot 中存在的文件,但如果找不到該文件,則檢索 Legacy.dev DocumentRoot 中的文件?
答案1
這聽起來像是Apache 中相當於 Nginx 的 try_files 的東西是什麼?會做你想做的事。
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]
嘗試尋找該文件,如果找不到,則將其傳遞給 apache 代理。 Apache:mod-rewrite 在另一個目錄中尋找遺失的圖片顯示了使用 mod_rewrite 在沒有代理的情況下執行類似操作的類似範例。正如您所看到的,它使用類似RewriteCond
但相當不同的方法RewriteRule
,這可能更容易使用。
正如您可能注意到的,第一個引用的答案是嘗試將 nginx 破解try-files
到 apache 中,所以在這種情況下您可能會直接使用 nginx 更滿意。 try_files 是如何運作的?如果這對您有幫助的話,應該會給您一個更好的想法。