【问题标题】:Image relative and absolute path and .htaccess图像相对和绝对路径以及 .htaccess
【发布时间】:2013-02-17 22:17:14
【问题描述】:

大家好,

我在 Codeigneter 中玩耍,并尝试制作某种相册只是为了好玩(在我真正开始之前更好地了解 codeigneter)。

现在我是否在这里建立了一个测试网站: http://foal.scriptsenprogs.nl/

现在的问题是用户将来可以上传图片。而且我希望该图像是某种保存...

因此,如果有人使用此链接: http://foal.scriptsenprogs.nl/media/img/albums/1.png

它应该被阻止(就像现在一样)。

我将这行代码放在一个 .htacces 文件中,该文件位于 /media/img/albums 文件夹中

<Directory "http://foal.scriptsenprogs.nl/media/img/albums" >
    Options Includes
    AllowOverride All
    Order allow,deny
    Deny from All
</Directory>

我必须承认我对 .htaccess 文件知之甚少,但这似乎可行(直接 url 被阻止)。

在我的 codeIgneter 代码中,我使用它来将图像添加到网页:

$str .= '<div style="margin-top:20px;"><img width="200px" src="./media/img/albums/' . $imageStuff[$row['album_id']] -> img_id . '.' . $imageStuff[$row['album_id']] -> img_type . '" /></div>';

在 .htaccess 文件之前,它有效。但现在它不起作用。

如果我检查 chromes 错误控制台,我会看到此错误:

GET http://foal.scriptsenprogs.nl/media/img/albums/1.png 404 (Not Found) foal.scriptsenprogs.nl:48

所以这是一个404 Not Found 错误。但是,如果您检查 URL,您会发现它被赋予了绝对 URL?但是我插入了一个相对 URL 对吗?

你们对如何解决这个问题有什么想法吗?

编辑 1 在子域的 de webroot 中,我有以下 .htaccess 文件:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|school|media|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

编辑 2 为了进一步澄清这个问题......

如果您在网站上 (http://foal.scriptsenprogs.nl/),则必须使用相对路径来显示图像。 (像这样:&lt;img width="200px" src="./media/img/albums/1.png" /&gt;

但是如果你试图通过绝对路径访问图像,它必须被阻止(链接将是这样的:http://foal.scriptsenprogs.nl/media/img/albums/1.png

【问题讨论】:

  • 我想显而易见的问题是:1.png 是否存在于文件夹 .../albums/ 中?
  • @faa,很明显,但是是的,它存在。它甚至在我玩 .htaccess 文件之前就可以工作;P
  • /media/img/albums/.htaccess 中唯一需要的就是一行 - deny from all
  • @Jeemusu,试过了,它有点工作(它否认一切)。但我无法在网页上显示图片以...而且我需要这样做。

标签: image .htaccess codeigniter relative-path absolute-path


【解决方案1】:

有时 CI 和相对 url 不能很好地结合在一起,请尝试使用 base_url 函数

'src="'.base_url().'media/img/albums/'

【讨论】:

  • 完成但不起作用。它返回http://foal.scriptsenprogs.nl/ 什么是正确的。但我想用/media/img/albums/1.png 阻止这样的网址。但我想在网页上显示它们。所以我希望我能做类似./media/img/albums/1.png
【解决方案2】:

您可以在现有的webroot/.htaccess 文件中添加新规则。

将以下内容放在文件顶部的RewriteEngine On 行之后。

RewriteCond %{HTTP_REFERER} !^http://(.+\.)?yoursite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png|jpg)$ /404.html [L]

这限制了对域http://yoursite.com的任何jpg、gif等的访问,其他请求被重定向到404页面。

注意:如果您在本地服务器上进行测试,您将与您的站点位于同一域中,因此很可能看起来什么都没有发生。

【讨论】:

  • 嗨,谢谢你的回复。我已经编辑了我的问题并添加了 webroot .htaccess 的内容。正如你所说,我在第一行之后插入了你的三行并将yoursite 更改为scriptsenprogs。我删除了/media/img/albums/ 中.htaccess 的内容。但我可以看到两张图片(新标签中的直接链接和网页中的包含...
  • 您的站点是否在本地服务器上? I.E 是您本地网络上的服务器,还是您的计算机上的服务器?
  • 它在一个真实的服务器上。地址是foal.scriptsenprogs.nl我尽量在本地做,因为有时会发生奇怪的事情:D
  • 没有那样做,因为它认为:(.+\.) 用于子域。现在这条线是这样的:RewriteCond %{HTTP_REFERER} !^http://(.+\.)?foal\.scriptsenprogs\.nl/ [NC] 但我仍然可以查看这两个图像...
  • 如果你写了一个错误的域,图像会变得不可见吗?
猜你喜欢
  • 2012-01-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2013-07-14
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多