문제

나는 Elmah를 확보하는 데 어려움을 겪고 있습니다. 나는 Phil Haacked 's를 따랐다 지도 시간, 데모 프로젝트 인 유일한 차이점은 웹 응용 프로그램이고 내 프로젝트는 웹 사이트입니다.

   <add verb="POST,GET,HEAD" path="/admin/elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />

   <location path="admin">
        <system.web>  
            <authorization>  
                <deny users="?"/>  
            </authorization>  
        </system.web> 
    </location>

선두 "/"나는 "자원을 찾을 수 없다는 응답을받습니다." .

예를 들어 선행 "/"

www.mysite.com/admin/elmah.axd- 인증을 트리거합니다
www.mysite.com/asdasdasd/admin/elmah.axd- 인증을 트리거하지 않고 Elmah를 표시합니다.

로그를 원격으로 볼 수있는 능력을 유지하면서 Elmah가 안전하다는 것을 어떻게 보장 할 수 있습니까?

감사.

다른 사람에 대한 참고 :
아래의 Alan의 답변에 따라 다음은 다음과 같습니다.

www.mysite.com/admin/elmah.axd- 인증을 트리거합니다
www.mysite.com/admin/asdasdasd/elmah.axd- 인증을 트리거합니다
www.mysite.com/asdasdasd/admin/elmah.axd- 자료를 찾을 수 없습니다. (정확히 우리가 원했던 것)

도움이 되었습니까?

해결책

나는 web.config와 함께 놀았고 다음과 같은 일을했다. 기본적으로 Elmah.axd httphandler를 일반 시스템에 넣는 대신 "Admin"경로 위치의 시스템에 특별히 추가하십시오.

<location path="admin">
    <system.web>
        <httpHandlers>
            <add verb="POST,GET,HEAD" path="elmah.axd"
                 type="Elmah.ErrorLogPageFactory, Elmah" />
        </httpHandlers>
        <authorization>
            <deny users="?"/>
        </authorization>
    </system.web>
</location>

다른 팁

ASP.NET MVC를 사용하는 경우 라우팅 엔진이 해당 경로를 무시해야합니다. Elmah를 /admin/elmah.axd로 옮기려면 Global.asax.cs에 다음을 추가해야합니다.

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

각 답변의 다양한 조언을 모아서 이것을 작동시키는 데 잠시 시간을 보냈으며, IIS의 모든 맛에 맞는 완전한 솔루션을 만들었습니다.

다음은 각 web.config 섹션에 필요한 사항입니다.

<configuration>
  <configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
  </configSections>

  <elmah>
    <!-- set allowRemoteAccess="0" for extra security -->
    <security allowRemoteAccess="1"/>
  </elmah>

  <system.web>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
  </system.webServer>

  <location path="admin">
    <system.web>
      <authorization>
        <!--<allow users="Admin" /> -->
        <deny users="?" />
      </authorization>
      <httpHandlers>
        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      </httpHandlers>
    </system.web>
    <system.webServer>
      <handlers>
        <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
      </handlers>
    </system.webServer>
  </location>

</configuration>

ASP.NET MVC를 사용하는 경우 추가하십시오

routes.IgnoreRoute("admin/elmah.axd/{*pathInfo}");

레지스터 구역에서.

IIS 7.5 Windows Server 2008에는 System.WebServer라는 다른 섹션이 있습니다. Elmah가 작동하기 위해서는 다음을 추가해야했습니다.

<system.webServer>
  <handlers>
   <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
  </handlers>
</system.webServer>

나는 몇 가지 차이를 시도했지만 '/blah/elmah.axd'가 작동하는 것을 방지하기 위해 위의 솔루션을 사용할 수 없습니다.

위의 솔루션을 IIS 7.X의 작동에 대한 제안이 있습니까?

감사.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top