若是你有遇到过较大规模的 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 本地开发的站点直接使用远程的文件,而我也可让节省下来的硬盘空间来放更多的猫咪图片了。