Позволете на анонимен потребител да преглежда папката Стил и изображения

Пиша ASP.NET уеб приложение.

Имам екран за вход, който съдържа някои CSS стилове и изображения. Попаднах на проблем, при който стиловете и изображенията не се показват. Четох онлайн и каза, че имам нужда от web.config в моята папка Content. Добавих следното към web.config:

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

Това изглежда работи на моята локална машина. Въпреки това, когато публикувам в inetpub на сървъра, не работи.

Ето структурата на папките ми:

Login/Login.aspx - моят екран за вход
Съдържание - това е основната ми папка със съдържание
Съдържание/Стилове - тук се съхранява моят CSS
Съдържание/Изображения - тук се съхраняват моите изображения

Опитах се да поставя същия web.config и в стилове и изображения, но и това не проработи.

Всяка помощ ще бъде оценена.

Актуализирано:

Ето какво имам в моя основен web.config, свързан с потребителския достъп:

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

Актуализирано 2: Ето всичко, което е в моя root 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>

Възможно ли е тук да има нещо, което пречи на достъпа на потребителя?


person johnmurphy01    schedule 30.04.2012    source източник
comment
Отхвърлят ли ги, когато поискат конкретно съдържание или когато се опитат да изброят съдържанието на директорията?   -  person Rob Rodi    schedule 01.05.2012
comment
Да, ако се опитам да отида директно в таблицата със стилове в браузър, бива отхвърлен на екрана за вход с обратен url.   -  person johnmurphy01    schedule 01.05.2012
comment
Някакви други идеи? Нито едно от решенията не работи за мен. Нещо, което е за отбелязване, всичко това работи на моята локална машина. Там, където имам проблеми, е когато публикувам на отдалечен сървър. Има ли конфигурация в IIS, която трябва да се промени, за да работи правилно?   -  person johnmurphy01    schedule 02.05.2012


Отговори (4)


Вижте моя отговор тук . Някои хора биха препоръчали да поставите файл web.config в папката, която искате да бъде отворена за обществеността, но аз предпочитам да наблюдавам всичко от основния елемент web.config. По принцип вмъквате същия фрагмент, който вече имате, но във файла web.config в корена на вашия уебсайт. Не забравяйте и атрибута "allowOverried=false". :)

Нещо друго, което може да бъде наистина трудно, е да определите правилния път. Уверете се, че сте го направили точно както трябва! :)

<location path="Path to your folder" allowOverride="false">
   <system.web>
      <authorization>
         <allow users="*"/>
      </authorization>
   </system.web>
</location>
person Daniel Szabo    schedule 01.05.2012
comment
Работи като чар :) - person Mohsin; 26.12.2018

Разбирам, че това е стар въпрос, но имах същия проблем и се надявам това да помогне на някого.

В моя случай трябваше да променя настройките за удостоверяване в IIS, за да го оставя да работи. Това звучи като случилото се, след като го преместихте на отдалечен сървър, където конфигурацията по подразбиране може да е различна.

Имаме режим Удостоверяване на Windows, активиран по подразбиране, но когато web.config посочи Удостоверяване на формуляри, той всъщност ще активира и двата в 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, така и Windows са активирани, въпреки че в конфигурацията ви пише само Forms. Това, което ще направи, е да подкопае вашите добавени файлове web.config в поддиректориите.

Когато имате следното във вашата папка „Съдържание“, изглежда, че има конфликт с Windows срещу Forms и независимо какво сте поставили, изглежда, че не отговаря на вашия web.config

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

Ако сте в същата ситуация, уверете се, че сте деактивирали Windows Authentication или други неизползвани режими на удостоверяване, като на изображението по-долу. Трябва също да се уверите, че Anonymous е активиран, за да може да бъде отворен за всички.

Надявам се това да помогне на някого.

въведете описание на изображението тук

person Kirk    schedule 03.04.2014

По принцип искате да позволите на всеки потребител да има достъп до файлове в папката Съдържание.

добавете това към вашия основен web.config:

<location path="Content">
        <system.web>
            <authorization>
                <allow users="*" />
            </authorization>
        </system.web>
    </location>
person Shai Cohen    schedule 30.04.2012
comment

Използвате Dev-C++, но strdup не е част от стандарта C или C++, а е POSIX функция. Трябва да дефинирате правилните (според документацията на вашата IDE) символи на предпроцесора, за да може strdup да бъде деклариран от заглавния файл ... това е необходимо, за да може заглавният файл да не замърсява пространството на имената, когато е включен в съответстващ C или C++ изходни файлове.

За проста преносима алтернатива, помислете

char* mystrdup(const char* s)
{
    char* p = malloc(strlen(s)+1);
    if (p) strcpy(p, s);
    return p;
}

Или, ако знаете, че strdup действително е в библиотеката, можете да копирате неговата декларация от string.h във вашия собствен изходен файл или заглавка ... или да използвате по-простата декларация от страницата на ръководството:

char *strdup(const char *s);
- person johnmurphy01; 01.05.2012
comment
Странно. Знам, че това работи, аз самият съм го използвал много пъти. Да видим дали можем да разберем проблема. Можете ли да редактирате първоначалния си въпрос със съответните части на вашия основен web.config? Търся да видя по-специално тези секции: authentication и всички location секции. - person Shai Cohen; 01.05.2012
comment
Разрешаване на * и ?, ‹allow users=*,? /› - person Nick Bork; 02.05.2012
comment
Вярвам, че само * е необходимо. ? е за неидентифицирани потребители. По някаква случайност все още ли имате другите конфигурационни файлове в стилове и изображения? - person Shai Cohen; 02.05.2012
comment
Не, изключих ги, за да приложа предложенията тук. - person johnmurphy01; 02.05.2012
comment
Чудя се защо не работи. Нека опитаме нещо друго. Променете пътя на местоположението на Съдържание/Стилове и проверете дали стиловете преминават. - person Shai Cohen; 02.05.2012
comment
Когато променя пътя на местоположението на Съдържание/Стилове, изображенията се показват, но стилът не присъства. - person johnmurphy01; 02.05.2012
comment
Освен това получавам съобщение 302 за местоположението на стиловия лист на страницата за вход, ако използвам Firebug. - person johnmurphy01; 02.05.2012
comment
Отговорът на Даниел Сабо е по-добър, защото споменава атрибута allowOverride. - person CSharper; 20.10.2019

Като документирам какво помогна в моя случай: Тази дискусия беше полезна

  • Имах друго приложение, където нямах проблема и единствената разлика беше, че IUSR имаше разрешения в папките. Добавянето на IUSR разрешения помогна
  • Използването на „инспектиране“ в браузъра за показване на конзолата прави ясно кога файловете не са достъпни (в противен случай локалното кеширане скрива резултатите)
  • Опитах се да използвам web.configs на различни нива, както е описано по-горе, но тези решения не работят за мен.
person Walter de Jong    schedule 22.05.2017