【问题标题】:Allow anonymous user to browse the Style and Images folder允许匿名用户浏览样式和图像文件夹
【发布时间】:2012-04-30 21:49:24
【问题描述】:

我正在编写一个 ASP.NET Web 应用程序。

我有一个登录屏幕,上面有一些 CSS 样式和图像。我遇到了样式和图像未显示的问题。我在网上阅读,它说我需要一个 web.config 在我的 Content 文件夹中。我在 web.config 中添加了以下内容:

<configuration>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</configuration>

这似乎在我的本地机器上工作。但是,当我发布到服务器上的 inetpub 时,它不起作用。

这是我的文件夹结构:

Login/Login.aspx - 我的登录屏幕
内容 - 这是我的根目录文件夹
内容/样式 - 这是我的 CSS 所在的位置
内容/图像 - 这是我的图像存储位置

我也尝试将相同的 web.config 放入 Styles 和 Images 中,但这也不起作用。

任何帮助将不胜感激。

更新:

这是我在主 web.config 中与用户访问相关的内容:

<location path="Content">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

更新 2: 这是我的根 web.config 除了连接字符串信息之外的所有内容:

<system.web>
<httpRuntime requestValidationMode="2.0"/>
<compilation debug="true" targetFramework="4.0"/>
<sessionState cookieless="UseCookies"/>
<authentication mode="Forms">
  <forms name="CMS" loginUrl="Login/Login.aspx" timeout="25" slidingExpiration="true"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>
<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
  </providers>
</membership>
<profile>
  <providers>
    <clear/>
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
  </providers>
</profile>
<roleManager enabled="false">
  <providers>
    <clear/>
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/>
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
  </providers>
</roleManager>
</system.web>
<location path="Content" allowOverride="false">
<system.web>
   <authorization>
     <allow users="*" />
   </authorization>
 </system.web>
</location>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

这里会不会有东西干扰了用户访问?

【问题讨论】:

  • 当他们请求特定的内容时,或者当他们试图列出目录的内容时,他们是否会被退回?
  • 是的,如果我尝试直接转到浏览器中的样式表,我会被弹回到带有返回 url 的登录屏幕。
  • 还有其他想法吗?没有一个解决方案对我有用。值得注意的是,这一切都适用于我的本地机器。当我发布到远程服务器时,我遇到了问题。 IIS 中是否有任何配置需要更改才能使其正常工作?

标签: asp.net configuration web-config web


【解决方案1】:

见我的answer here。有些人会建议将 web.config 文件放在要向公众开放的文件夹中,但我更喜欢从根 web.config 元素监视所有内容。基本上,您插入与您已有的相同的 sn-p,但插入到您网站根目录的 web.config 文件中。不要忘记“allowOverried=false”属性。 :)

真正棘手的事情是让路径正确。确保你做对了正确! :)

<location path="Path to your folder" allowOverride="false">
   <system.web>
      <authorization>
         <allow users="*"/>
      </authorization>
   </system.web>
</location>

【讨论】:

  • 工作就像一个魅力:)
【解决方案2】:

我意识到这是一个老问题,但我遇到了同样的麻烦,希望这对某人有所帮助。

就我而言,我必须更改 IIS 中的身份验证设置 才能让它工作。这听起来像是将其移至默认配置可能不同的远程服务器后发生的情况。

我们默认启用了Windows Authentication模式,但是当web.config指定Forms Authentication时,它实际上会同时启用它们在 IIS 配置中打开。

有了你的 web.config,你就有了这样的东西

<system.web>
    <authentication mode="Forms">
        <forms name="CMS" loginUrl="Login/Login.aspx" timeout="25" slidingExpiration="true"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>
    <!-- ...etc... -->
</system.web>

如果您移动到的服务器启用了 Windows 身份验证,它在 IIS 中将如下所示

请注意,尽管您的配置仅显示了 Forms,但 Forms 和 Windows 都已启用。这将破坏您在子目录中添加的 web.config 文件。

当您的 Content 文件夹中有以下内容时,它似乎与 Windows 与 Forms 存在冲突,无论您放什么,它似乎都不符合您的 web.config

<configuration>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</configuration>

如果您处于同样的情况,请确保禁用 Windows 身份验证或任何其他未使用的身份验证模式,如下图所示。您还需要确保启用匿名以使其对所有人开放。

希望这对某人有所帮助。

【讨论】:

    【解决方案3】:

    基本上,您希望允许任何用户访问 Content 文件夹中的文件。

    将此添加到您的主 web.config:

    <location path="Content">
            <system.web>
                <authorization>
                    <allow users="*" />
                </authorization>
            </system.web>
        </location>
    

    【讨论】:

    • 我更改了我的主 web.config 以包含这段代码,但它似乎没有做任何事情。
    • 奇怪。我知道这行得通,我自己用过很多次。让我们看看我们是否能找出问题所在。您能否使用主要 web.config 的相关部分编辑您的原始问题?特别希望看到这些部分:authentication 和所有 location 部分。
    • 允许 * 和 ?,
    • 我相信只有 * 是必要的。 ? 用于身份不明的用户。不知不觉中,Styles 和 Images 中还有其他配置文件吗?
    • 不,我排除了这些是为了实施这里的建议。
    【解决方案4】:

    通过记录对我的案例有帮助的方式: This discussion was useful

    • 我有另一个没有问题的应用程序,唯一的区别是IUSR 在文件夹中具有权限。添加 IUSR 权限有帮助
    • 在浏览器中使用“inspect”来显示控制台可以在文件不可访问时一目了然(否则本地缓存会掩盖结果)
    • 我尝试在上述各个级别使用 web.configs,但这些解决方案对我不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      相关资源
      最近更新 更多