【问题标题】:Serving images from outside of document root从文档根目录之外提供图像
【发布时间】:2010-06-28 10:19:46
【问题描述】:

有可能吗?

假设我的目录结构如下所示:

/data
    /data/images
/public

文档根目录位于“public”目录中。这当然行不通:

<img src="/../data/images/1.png" alt="" />

但也许有可能以某种方式启用从文档根目录上方的目录提供图像?我想知道。

【问题讨论】:

  • 嗯,有几种方法,比如symlink。但是在您告诉我们之前不可能给出正确的答案,将图像存储在文档根目录之外的目的是什么
  • 您可以使用 .htaccess 重写对图像的任何传入请求以通过图像服务脚本,但话又说回来,您为什么要这样做?这不会保护您的图像不受任何影响。一旦它显示在浏览器中,它就在客户端上。

标签: php apache .htaccess


【解决方案1】:

最常见的方式是Alias

Alias /data/ /wherever/your/data/are/

【讨论】:

  • +1 这需要放入httpd.conf 本身,但它在.htaccess 文件中不起作用。
  • +1,为了安全起见,我使用此方法尝试将尽可能多的文档保留在 public_html 之外。
  • @Robert umm,这将如何增加安全性?
  • 当我将我的执行文件(如 php)存储在 html 根范围之外并从目录根中包含时,我会确保安全,我不会担心诸如 js 之类的公共文件,只是说它更好通常将文件存储在公共根目录之外。 - php 文件不会被注入尝试和公开的方式安全。
  • +1 这正是正确的答案。在 httpd.conf 它说,逐字"Maps web paths into filesystem paths and is used to access content that does not live under the DocumentRoot."
【解决方案2】:

另一种方法(例如,如果您不能设置别名...)是使用脚本作为图像源,例如:

<img src="image.php?img=myImage.jpg" />

image.php 类似于:

<?php
  header('Content-Type: image/jpg');
  readfile("../img/" . $_GET['img']);
?>

当然,您需要扩展脚本以过滤 $_GET['img'],以及检测和设置正确的内容类型。您的脚本甚至可以根据查询字符串中传递的其他参数调整图像大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 2014-02-19
    相关资源
    最近更新 更多