若是你有遇到過較大規模的 Drupal 項目,但可能已經發現了當 files 目錄過於巨大對開發所帶來的巨大挑戰。如何讓開發服務器(或者你的我的電腦)與這些文件保持同步是件很是痛苦的事情,但若是不這樣作,每每又會由於沒法使用用戶上傳的文件或附件,使網站開發過程當中的不少重要的問題沒法被發現。 css
要解決這個問題有很是多的辦法,但要麼很是慢,要麼很是複雜。例如使用Drush命令或者使用腳本程序將網站的文件下載後再上傳到本地開發環境,甚至有人會考慮使用FTP執行這樣的操做(請千萬不要這樣作)。儘管這些辦法都能達到效果,但我仍是但願可以節約寶貴時間和硬盤空間。 服務器
最開始咱們找到了 Stage File Proxy 模塊,它可以讓 Drupal 將全部的文件請求都定向到線上服務器,即便網站是在本地運行時也能夠有效工做。可是要讓這個模塊正常工做,須要對網站進行一些調整並安裝額外的模塊。因此,儘管這個模塊能夠解決問題,但我仍是但願能有其它的方案。 網站
以後,咱們發現可使用 Apache 的 URL重寫規則來知足須要——當Apache程序在處理連入的網頁請求時,重寫規則容許它對知足指定規則的URL地址進行修改——例如,它能夠將訪問本地 files 目錄的請求重定向到線上的服務器。 spa
通過查找有關URL重寫規則的帖子和教程,咱們終於能夠寫出所須要的代碼了。由於我使用 MAMP 進行開發,因此添加 Apache 配置代碼片斷比安裝模塊要簡單得多。同時這個辦法即不須要對修改網站設置,也不需啓用新的模塊。若是你不是使用 MAMP 做爲開發環境,Apache重寫配置代碼的設置可能會略有不一樣。(譯註:其實就是將如下配置代碼片斷粘貼到Apache網站配置部分) server
如下即是讓 Drupal 開發時使用遠程文件的示例代碼: 教程
### Apache Rewrite 圖片
RewriteEngine on ci # Force image styles that have local files that exist to be generated. 開發 RewriteCond %{REQUEST_URI} ^/sites/([^\/]*)/files/styles/[^\/]*/public/((.*))$ get RewriteCond %{DOCUMENT_ROOT}/sites/%1/files/%2 -f RewriteRule ^(.*)$ $1 [QSA,L] # Otherwise, send anything else that's in the files directory to the # production server. RewriteCond %{REQUEST_URI} ^/sites/[^\/]*/files/.*$ RewriteCond %{REQUEST_URI} !^/sites/[^\/]*/files/css/.*$ RewriteCond %{REQUEST_URI} !^/sites/[^\/]*/files/js/.*$ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://www.example.com/$1 [QSA,L] |
若是你使用MAMP進行開發,打開MAMP,在高級面板的最下方找以「自定義虛擬主機設置」,將上面的代碼粘貼進去後進行保存便可(注意將代碼中的 example.com 修改爲你本身的域名地址)。
最後,只須要重啓Aapche即可以讓 Drupal 本地開發的站點直接使用遠程的文件,而我也可讓節省下來的硬盤空間來放更多的貓咪圖片了。