如何避免从 Azure Web 托管中托管的文件夹 Codeigniter 访问图像

How avoid access images from folder Codeigniter Hosted in Azure web hosting

我的文件夹结构是这样的

application
system
public
uploads > images
index.php
----------

我想限制 非用户访问上传文件夹中的图片,方法是在 URL 中输入路径(Ex - www.exapmple.com/uploads/images/new.png ).我的主机是 Azure,我认为它也不支持 .htaccess。

Azure 使用 IIS 托管您的 Web 应用程序。所以要达到你的要求,你可以先在/wwwroot文件夹下添加名为web.config的IIS配置文件,然后在<system.webServer>.

中添加以下元素
<security>
  <requestFiltering>
    <hiddenSegments>
      <add segment="uploads"/>
    </hiddenSegments>
  </requestFiltering>
</security>

最后 web.config 看起来像:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webServer>

    <security>
      <requestFiltering>
        <hiddenSegments>
          <add segment="uploads" />
        </hiddenSegments>
      </requestFiltering>
    </security>

  </system.webServer>
</configuration>

这将阻止所有用户直接访问 /uploads 文件夹及其内容。


编辑:

您可以使用虚拟目录 将上传文件夹中的图像显示到public。

循序渐进

  1. Azure Portal 中,打开 Web 应用程序的边栏选项卡。
  2. 单击“设置”菜单下的应用程序设置
  3. 滚动到虚拟应用程序和目录
  4. 添加一个虚拟目录/public,然后输入物理路径site\wwwroot\uploads\images.
  5. 单击保存

图片如下:

现在您可以在 URL www.exapmple.com/public/new.png 中输入路径来访问实际位于 site\wwwroot\uploads\images 文件夹下的图像。

我将下面的代码添加到上传文件夹中作为 web.config(因为 .htaccess 文件在 Azure 托管中不起作用)。之后我将所有图像转换为 base64 encoding。对于图像视图,我使用了 base64 解码。通过这个解决方案,我轻松地解决了我的问题。

<location path="Admin">
    <system.web>
        <authorization>
            <allow roles="Administrator"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>