0

我想避免直接访问目录中的图像。请让我解释一下我需要什么,因为它有点复杂;)

我有一个名为“member”的目录,在这个目录中是像“thorsten”这样的成员目录,在这个目录中是成员的图像。所以我的看起来像这样:

    index.php // The index.php is in the same directory as the member directory ;)

    member/thorsten/Thorsten-fTeVtE-Preview-01.jpg
    member/thorsten/Thorsten-gZ4Cd3-01.jpg

    .htaccess // The .htaccess should be here too :)

如您所见,成员 thorsten 现在有两张图片,一张有“预览”字样,一张没有。我需要的是,我想禁止通过图像的 url 直接访问文件名中没有“预览”一词的所有图像。

另一个棘手的部分是此示例中的用户目录(如“thorsten”)可以有任何名称,例如还可以有:

    member/melanie/Melanie-fh3wxcg-Preview-01.jpg

    or

    member/conny/Conny-fh3wxcg-Preview-01.jpg

我希望你明白我的意思,成员目录名称应该是可变的;)

谢谢 :)

4

2 回答 2

0

有两种方法可以做到这一点

方法1 拒绝访问时,即使通过网页也无法访问。

第 1 步:阻止访问 mysite.com/member/

进入文件夹成员,创建新的 .htaccess 文件并添加以下行:

Order Deny,Allow
Deny from all

第 2 步:设置另一种方式来自己访问文件

在文件夹成员中创建文件 get_image.php 并添加以下代码:

if( !empty( $_GET['name'] ) )
{
    $img_name = preg_replace( '#[^-\w]#', '', $_GET['name'] );
    $img_file = "{$_SERVER['DOCUMENT_ROOT']}/member/{$img_name}";
    if( file_exists( $img_file ) )
    {
      header( 'Cache-Control: public' );
      header( 'Content-Description: File Transfer' );
      header( "Content-Disposition: attachment; filename={$img_file}" );
      header( 'Content-Type: image/jpeg' );
      header( 'Content-Transfer-Encoding: binary' );
      readfile( $song_file );
      exit;
    }
}

现在,您可以使用此 URL 获取歌曲文件: http ://mysite.com/member/get_img.php?name=file-name

方法 2有选择地阻止访问。

在您的 htaccess 中使用正则表达式

.*?Preview.*?\.jpg
于 2013-06-18T14:38:38.373 回答
0

像这样的东西(除了我的 RegEx 可能是错误的)

<FilesMatch "^member\/(?!preview)([a-z0-9]+)$">
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
</FilesMatch>


或者你也可以这样做:

<Directory /your/www/root>
  <FilesMatch "^member/$">
    Order Deny,Allow
    Deny from All
  </FilesMatch>
  <FilesMatch "^member/?preview?$">
    Order Allow,Deny
    Allow from All
  </FilesMatch>
</Directory>

于 2013-06-18T14:43:53.743 回答