当我在visual studio中通过调试模式运行我的网站时,一切看起来都很棒,并且页面上的所有图像都显示正常。但是,一旦我将我的网站部署到IIS7网络服务器(怀疑其他版本会有所作为,但你永远不知道),那么用户在登录之前就无法看到网站上的图像。
该网站是一个asp.net MVC网站,我是MVC的新手,虽然我对asp.net表单有很多经验。似乎只允许经过身份验证的用户访问images文件夹,并且我的web.config中有一个授权部分,说只有管理员可以访问该站点,所以我该如何创建它以便所有用户,经过身份验证或以其他方式查看图像?
- 更新 -
我尝试使用建议的配置块,从我能说的所有内容都非常有意义,但它似乎并没有什么区别。下面的示例包含路径的内容/图像,但在此之前我只尝试了内容,因为可以访问其中的所有内容。我也尝试将allowOverride设置为false,这似乎也没有什么区别。
<location path="Content/Images">
<system.web>
<authorization>
<allow users ="*" />
</authorization>
</system.web>
</location>
- 更新2 - 有趣的是,我甚至没有在我的web.config中看到任何明确的拒绝条目,只是允许管理员,当我进入IIS 7并使用UI允许所有用户访问内容目录时它没有在列表中显示任何拒绝。但话说再说一次,当我从我的个人计算机上调试它时,这个项目工作正常,只有在我部署之后我才遇到问题......
<authorization>
<allow roles="admin" />
</authorization>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
答案 0 :(得分:14)
在您的web.config文件中,在</system.web>
标记之后添加以下内容
<location path="images">
<system.web>
<authorization>
<allow users ="*" />
</authorization>
</system.web>
</location>
其中path="images"
是包含images / css的文件夹的名称。
如果您正在使用ASP.NET MVC,我会删除web.config文件中的授权声明,并使用需要锁定的控制器上的[Authorize]
属性。
您还可以使用[Authorize("admin")]
指定要授予其访问权限的角色。
答案 1 :(得分:6)
默认情况下,您在Web.config文件中定义的配置适用于其包含文件夹的每个子目录。如果应用程序根目录中有Web.config,则该配置将传播到每个子目录,包括具有图像和Css样式表的子目录。所以,如果您在根Web.config中有这样的规则:
<system.web>
...
<authorization>
<deny users="?"/>
</authorization>
...
</system.web>
匿名用户将无法像您期望的那样访问显示页面所需的资源。
要修复它,您需要在具有演示资源的每个子目录中包含另一个Web.config,并应用您要覆盖的规则。在你的情况下,这应该做的工作:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</configuration>
如果您使用的是主题,请在主题文件夹中放置一个Web.config文件。
答案 2 :(得分:6)
刚遇到同样的问题。我们在登录页面上注意到了它。 CSS和图像未加载(它们位于内容目录下)。将IUSR添加到具有读取权限的文件夹中为我们修复了它。
答案 3 :(得分:2)
老问题,但我遇到了同样的问题并找到了答案。 我为会员页面创建了一个新文件夹,我希望登录用户可以访问,但图像不会显示在其中! 事实证明,无论我尝试什么,我都无法在Members文件夹中设置图像的相对路径。
问题是html图像(据我所知,如果我错了,请纠正我)。
我把它换成了asp:image
的相对路径,现在效果很好。
我的新代码:asp:image runat="server" id="Logo" ImageUrl="~/Images/logo.jpg"
注意'〜/',这对我不起作用
我尝试过:img src="../Images/logo.jpg"
,img src="~/Images/logo.jpg"
,img src="/Images/logo.jpg"
等无济于事。
希望这个答案有助于将来更快地解决这个问题。
答案 4 :(得分:1)
尝试直接浏览图片文件,看看是否出现匿名用户。在IIS 7中,有一种方法可以直接从UI中授权匿名用户[如果不存在,则会创建web.config]。
文件夹 - &gt; .NET授权规则 - &gt;添加允许规则
答案 5 :(得分:0)
您使用的是会员框架吗?我怀疑您在web.config中错误配置了权限设置,而您的images文件夹只允许授权请求。这可以通过web.config轻松更改。只需从授权部分删除文件夹名称,这应该可以解决问题。
如果您使用的是成员资格框架,那么您应该参考web.config中的部分:
<authorization>
<deny roles="xyz" />
</authorization>
答案 6 :(得分:0)
我们在项目中遇到了同样的问题并找到了解决方案,但我们不确定这种行为的原因。
我们有一个类似的场景,其中包含一个包含所有png图像的文件夹。我们的营销同事想要重命名其中的一些,所以为了让她更容易,我们共享(这可能是关键)该文件夹,授予读者/作者权利。
从这一点开始,图像开始按照您的描述运行,需要授权才能访问。没有未经授权的用户可以再看到它们。
我们意识到问题与共享文件夹有关,因为它在那个时间点开始发生。否则,我们仍然看不到ASP.NET MVP用户授权/登录和硬盘用户权限之间的任何关系。我们本可以预料到IO异常或类似的东西,但不是这种行为。
检查文件夹后,与其他文件夹进行比较,我们意识到共享后,文件夹的权限略有变化。主要是他们不再继承其父文件夹,并且某些权限(如CREATOR OWNER和MACHINE_NAME \ Users)已消失(尽管IUSR和应用程序池用户仍在那里)。
因此,我们重命名该文件夹,创建一个具有相同名称的新文件夹,并将旧文件夹中的内容复制到新文件夹中。新文件夹具有从其父级继承的权限,一切都开始完美运行。
它解决了我们的问题,但我们仍然不确定为什么这一切都是这样发生的。
此致