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

Jos*_*osh 24 php .htaccess

更具体地说,我有一个htaccess文件,限制任何人看到目录内容.这样,没有人可以通过使用以下方式在www.example.com/images中看到我的1000张图像:

deny from all
allow from 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

但是,我想在www.example.com上使用这些图像,这样可行 <img src="images/thisimg.jpg" />.

我希望我的方向正确,但我很欣赏任何见解/重新指导.这类似于:如何保护所有目录内容,但获得访问php脚本但我想链接到该目录中的这些图像,并且使用deny from all不允许我这样做.

在此先感谢您的帮助.

Mag*_*eer 45

在.htaccess

Options -Indexes
Run Code Online (Sandbox Code Playgroud)

http://httpd.apache.org/docs/current/mod/core.html#options

  • 这绝对是最好的答案. (3认同)

Fos*_*sco 24

让人们看不到目录内容的所有内容都是该文件夹中的index.php或.html文件.任何对yoursite.com/images的请求都会加载index.php,您将设置为虚拟页面.

index.html可能是这样的:

<html><title>Forbidden!</title><body>Nothing to see here...</body></html>
Run Code Online (Sandbox Code Playgroud)

或重定向脚本index.php:

<?php header('Location: /index.php'); exit(); ?>
Run Code Online (Sandbox Code Playgroud)

不要使用.htaccess来阻止目录列表,它会阻止访问所有内容.

  • 这是不正确的,应该在htaccess中完成.对于相同的结果,您可以覆盖在apache/httpd配置中列出的功能,但两者都不会阻止用户访问单个图像.使用这种技术在网站上不正确地访问了无数的图像和媒体.用户只需猜测文件名. (9认同)
  • @Jason那就是......他不想阻止访问图像.他希望链接到他页面上的图像和用户能够加载它们.他只是想阻止目录列表. (2认同)

Abr*_*hin 17

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

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

<html>
  <title>Forbidden!</title>
  <body>
    <h1>Access Denied !!</h1>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

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

选项2(更优先) -

您可以在.htaccess文件的末尾添加它 -

Options -Indexes
Run Code Online (Sandbox Code Playgroud)

所以,你的.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>
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述


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

更多信息可以在这里找到.