使用 htaccess,如何限制查看目录内容,但允许服务器使用内容?
Posted
技术标签:
【中文标题】使用 htaccess,如何限制查看目录内容,但允许服务器使用内容?【英文标题】:Using htaccess, how to restrict seeing directory contents, but allow server to use the contents? 【发布时间】:2011-09-03 16:15:46 【问题描述】:更具体地说,我有一个 htaccess 文件,它限制任何人查看目录内容。这样,没有人可以使用以下命令在 www.example.com/images 中看到我的 1000 张图片:
deny from all
allow from 127.0.0.1
但是,我想在 www.example.com 上使用这些图片,这样,
<img src="images/thisimg.jpg" />
有效。
我希望我的方向是正确的,但我感谢任何见解/重定向。这类似于:How to protect all directory contents, but gain access to php script 但我想链接到该目录中的这些图像,并且使用deny from all
不允许我这样做。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:在 .htaccess 中
Options -Indexes
http://httpd.apache.org/docs/current/mod/core.html#options
【讨论】:
这绝对是最好的答案。 您能进一步解释一下吗?我已经看到了链接,但无法弄清楚它的确切含义...... 这是错误的。如果域有一个没有文件扩展名的子页面怎么办?例如:example.com/about-us(将返回 404 错误) @HashanKanchana 你错了。您可能在 .htaccess 中设置了其他错误,例如干扰此行的 URL 重写。【参考方案2】:您只需要在该文件夹中放置一个 index.php 或 .html 文件,就可以防止人们看到目录内容。对 yoursite.com/images 的任何请求都将加载 index.php,您将其设置为一个虚拟页面。
index.html 可能类似于:
<html><title>Forbidden!</title><body>Nothing to see here...</body></html>
或重定向脚本 index.php:
<?php header('Location: /index.php'); exit(); ?>
不要使用 .htaccess 来阻止目录列表,它会阻止对所有内容的访问。
【讨论】:
这是不正确的,应该在htaccess中完成。对于相同的结果,您可以覆盖在 apache/httpd 配置中列出的功能,但两者都不会阻止用户访问单个图像。使用此技术在网站上不正确地访问了无数图像和媒体。用户只需猜测文件名。 @Jason 就是这样......他不想阻止对图像的访问。他想链接到他页面上的图像以及用户能够加载它们。他只是想阻止目录列表。 我现在看到并没有完全理解他的问题。我对添加索引页面以“保护”某些东西的反应总是用火杀死它。但是,如果您的用户需要通过身份验证才能查看这些图像,我的回答仍然适用。谢谢@Fosco 好吧,我没有提到我也不希望这些图像被其他任何人使用。我放置了一个 htaccess 来防止盗链,但这并不能阻止任何人进入源代码并找到图像的路径,然后按照该链接指向图像。有什么建议吗? 你可以查看referrer,实现一些pass-thru hotlink检测脚本..很多东西。 .htaccess 可能会返回,您可以使用 .php 文件根据参数读取/输出图像。【参考方案3】:选项 1(简单但不推荐)-
您不需要像这样创建 index 文件-
<html>
<title>Forbidden!</title>
<body>
<h1>Access Denied !!</h1>
</body>
</html>
并将其放置在您不想向用户显示的每个资源目录和目录中。
选项2(更可取)-
您可以在 .htaccess 文件的末尾添加它-
Options -Indexes
那么,你的.htaccess
文件可能是这样的-
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %HTTP:Authorization .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
Options -Indexes
</IfModule>
如果你这样做并尝试转到一个目录,你会得到类似的东西-
因此,没有人能够发现服务器中的任何目录。
更多内容请关注here。
【讨论】:
我喜欢这个,因为它是用户反馈的最佳选择。禁止! 它在 .htaccess 中对我不起作用。似乎 .htaccess 对我的服务器没有影响。【参考方案4】:最简单的解决方案:在您的图像文件夹中创建一个空白页面名称index.html
:)
【讨论】:
这是一个快速破解 - 这背后的逻辑是什么? @SIslam 是的 - index.html 将是呈现给用户的页面,而不是目录内容的默认列表。如果它是空白的,用户将什么也看不到:)【参考方案5】:在 .htaccess 文件中使用类似的东西:
#
###################################################################
### ###
### Currently protection ###
### images (jpg, jpeg, gif, png, bmp) ###
### javascript (js) ###
### Cascading Style Sheets (CSS) ###
### ###
###################################################################
#
<IfModule mod_rewrite.c>
RewriteCond %HTTP_REFERER !^http://(www\.)?mysite.com/.*$ [NC]
RewriteCond %HTTP_REFERER !^http://(www\.)?mysite.com$ [NC]
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|js|css)$ http://access- denied.us/hotlinks.html [NC,L]
</ifModule>
#
这将允许您的页面加载您想要的文档和图像,同时阻止其他所有人的页面这样做。我在我所有的网站上都使用它,效果很好。
【讨论】:
【参考方案6】:deny from all
允许服务器端脚本使用文件,但限制完整的 Web 访问。
【讨论】:
【参考方案7】:对我来说,我觉得完成它的最简单方法是使用重定向。在图像目录上,只需创建一个索引页面,然后在索引页面中,您可以重定向到您的站点索引页面,即
<?php
header( 'Location: http://www.yoursite.com' ) ;
?>
因此,每当有人尝试直接访问图片页面时,他们最终都会进入您网站的根目录。
【讨论】:
【参考方案8】:如果是我,我会确保引荐来源网址是 www.example.com,这是它的主要用途之一。
【讨论】:
你可以欺骗引荐来源网址,所以最终有人会找出这个漏洞。【参考方案9】:Magicianeer 的建议最适合这个问题。如果您的图像被分成子文件夹,您必须在每个子文件夹中放置一个索引文件。 'Options -Indexes' 只需要在根目录执行一次。
【讨论】:
拒绝所有允许服务器端脚本使用的文件,但限制完整的 Web 访问。【参考方案10】:在您要显示禁止访问的文件夹中 创建一个名为 index.php 的文件并粘贴此代码
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access This Folder
on this server.</p>
</body></html>
【讨论】:
【参考方案11】:我使用了一个技巧,让人们认为他们访问了一个不存在的文件夹。
创建一个 HTML 文件并添加:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body>
</html>
【讨论】:
而且,一旦用户访问“不存在”的文件夹,我们将如何加载此页面?我不确定你的答案是否很清楚。以上是关于使用 htaccess,如何限制查看目录内容,但允许服务器使用内容?的主要内容,如果未能解决你的问题,请参考以下文章