2012-07-02 3 views
4

ASP.NET MVC3에서 검색 페이지를 만들고 있습니다.URL 검색 용어로 web.config를 처리하는 방법

는 작업을 호출하는 URL을했다 :

http://mydomain/Search?q=searchterm 

내가 키워드 "의 Web.config"를 검색하면 잘 작동 :

http://mydomain/Search?q=web.config 

하지만 지금은, 내가 URL이 원하는 : 내가 "의 Web.config"를 검색 할 때

http://mydomain/Search/searchterm 

나는처럼, Global.asax에에 경로를 추가하는 이런 짓을하지만, 한검색 디렉토리의 실제 web.config 파일을 요청하고 있다고 생각하기 때문에 서버에서 내 요청을 종료합니다.

어쨌든 asp.net이 파일의 요청이 아닌 검색 작업의 매개 변수로 "q/q"URL을 "q/q"로 간주하게 할 수 있습니까? 당신의 RegisterRoutes 당신은 라우팅 엔진을 통해 전달하는 기존 파일에 대한 요청을 가능하게 할 수 Global.asax에서에서

+1

은이 문서를 참조하십시오 http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in- URLs.aspx –

답변

1

:

routes.RouteExistingFiles = true; 

주의 모든 요청이 이제 ASP.NET MVC 라우팅 엔진을 통해 갈 것이라고한다면 그. 당신이 깨진 이미지 나 자바 스크립트와 CSS 참조를보고 싶지 않아 그래서 경우에 당신은 명시 적으로 제외해야합니다 또한

routes.IgnoreRoute("scripts/{resource}.js"); 
routes.IgnoreRoute("content/{resource}.css"); 
routes.IgnoreRoute("iamges/{resource}.png"); 
routes.IgnoreRoute("iamges/{resource}.jpeg"); 
... 

을 당신은 보안의 일부를 제거해야 7+ 당신은 IIS에서 응용 프로그램을 호스팅하는 경우 일반적으로 web.config.config 파일을 제공하지 못할 필터 :

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <security> 
     <requestFiltering> 
     <fileExtensions> 
      <remove fileExtension=".config"/> 
     </fileExtensions> 
     <hiddenSegments> 
      <remove segment="web.config"/> 
     </hiddenSegments> 
     </requestFiltering> 
    </security> 
</system.webServer> 
+0

이것은 좋은 생각 인 것 같지만 global.asax에이 규칙을 추가하면 모든 이미지가 표시되지 않습니다. ( –

+0

라우팅에서 정적 리소스를 제외 시켰는지 확인하십시오 : routes.IgnoreRoute ("images/{image} .png ");'. 사이트의 URL을 처리하고 조정해야하는 다른 정적 리소스와 동일합니다. –

+0

몇 가지 추가 정보로 답변을 업데이트했습니다. –

0

당신은 당신을 위해이 작업을 수행하기 위해 IIS의 URL RW 드라이브 모듈을 사용할 수 있습니다; 그것은 Global.asax에서 필요한 논리를 제거하고 URL을 단순화하기 위해 귀하의 웹 사이트에서 그것을 사용할 수 있습니다.

Rewriter Module

Adding a Rewriter Rule

샘플 규칙 :

<rewrite> 
    <rules> 
    <rule name="Rewrite to search"> 
     <match url="^search/([_0-9a-z-]+)" /> 
     <action type="Rewrite" url="search.aspx?q={R:1}" /> 
    </rule> 
    </rules> 
</rewrite>