使用htaccess,如何限制查看目录内容,但允许服务器使用内容?

时间:2011-05-27 20:17:48

标签: php .htaccess

更具体地说,我有一个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不允许我这样做。

提前感谢您的帮助。

11 个答案:

答案 0 :(得分:42)

答案 1 :(得分:24)

让人们看不到目录内容的所有内容都是该文件夹中的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来阻止目录列表,它会阻止对所有内容的访问。

答案 2 :(得分:17)

选项1(简单但不优选) -

您无需像这样创建索引文件 -

&#13;
&#13;
<html>
  <title>Forbidden!</title>
  <body>
    <h1>Access Denied !!</h1>
  </body>
</html>
&#13;
&#13;
&#13;

并将其放在您不想向用户显示的每个资源目录和目录中。

选项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>

如果你这样做并尝试去一个目录,你会得到这样的东西 -

enter image description here

因此,没有人能够发现服务器中的任何目录。

可以找到更多here

答案 3 :(得分:3)

最简单的解决方案:在图片文件夹中创建空白页面名称index.html:)

答案 4 :(得分:2)

在.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>
 #

这将允许您的页面加载您想要的文档和图像,同时阻止所有人使用它们。我在我的所有网站上都使用它,效果很好。

答案 5 :(得分:1)

对我而言,我认为完成任务的最简单方法是使用重定向。在图像目录上,只需创建一个索引页面,并在索引页面中重定向到您的站点索引页面,即

<?php
   header( 'Location: http://www.yoursite.com' ) ;
?>

因此,每当有人试图直接访问图片页面时,他们最终会转到您网站的根目录。

答案 6 :(得分:0)

如果是我,我只是确保推荐人是www.example.com,这是其中一个主要用途。

答案 7 :(得分:0)

Magicianeer的建议是这个问题的最佳选择。如果您的图像被分成子文件夹,则必须在每个文件夹中放入一个索引文件。 '选项 - 索引'只需要在根目录下完成一次。

答案 8 :(得分:0)

deny from all允许服务器端脚本使用文件,但限制完整的Web访问。

答案 9 :(得分:0)

在您要禁止访问的文件夹中 创建一个名为index.php的文件并粘贴此代码

&#13;
&#13;
<!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>
&#13;
&#13;
&#13;

答案 10 :(得分:0)

我使用的技巧让人们认为他们已经访问了一个不存在的文件夹。

创建一个HTML文件并添加:

&#13;
&#13;
<!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>
&#13;
&#13;
&#13;