asp.net을 통해 확장자가없는 URL을 리디렉션하고 수정하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/121813

문제

우리는 구조를 여러 비즈니스 단위를 가진 웹 사이트에 재 설계했습니다. 이제 새 페이지로 리디렉션 (301)을 리디렉션하고 싶습니다.

즉:
www.example.com/abc였습니다
이제 www.example.com/default.aspx?article=abc

이 작업을 수행하기 위해 Global.asax를 사용하려고했으며 디버그 할 때 제대로 작동합니다.

        if (Request.RawUrl.Contains("abc"))
        {
            Response.RedirectLocation = "/default.aspx?article=abc";
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved";
            Response.End();
        }

그래서 http : // localhost : 1234/example/abc 올바르게 리디렉션이지만 (여기서 1234는 디버깅 서버의 포트입니다)
http : // localhost/example/abc 리디렉션되지 않고 404를줍니다.

어떤 아이디어?


추가 정보 : 내가 가면 http : //localhost/example/abc/default.aspx 그런 다음 올바르게 리디렉션됩니다.

도움이 되었습니까?

해결책

글쎄, 포트에 내장 웹 서버 (VS와 함께 제공되는)를 사용하고 있음을 나타내는 경우 아마도 작동하기 때문에 작동합니다. 언제나 경로는 ASP.NET 프레임 워크를 통해 요청합니다.

/ABC로 끝나는 요청은 IIS가 원하는 "알지 못해"ASP.NET 프레임 워크를 자동으로 경로로 경로하지 않습니다. 해당 요청이 aspnet_isapi.dll로 라우팅되어 있는지 확인하려면 IIS 설정을 확인해야합니다.


편집하다: 이를 달성하려면 a를 추가해야합니다 와일드 카드 매핑:

  1. IIS 관리자에서 로컬 컴퓨터를 확장하고 웹 사이트 폴더를 확장하고 원하는 웹 사이트 또는 가상 디렉토리를 마우스 오른쪽 버튼으로 클릭 한 다음 속성을 클릭하십시오.
  2. 적절한 탭 : 홈 디렉토리, 가상 디렉토리 또는 디렉토리를 클릭하십시오.
  3. 응용 프로그램 설정 영역에서 구성을 클릭 한 다음 매핑 탭을 클릭하십시오.
  4. 와일드 카드 응용 프로그램 맵을 설치하려면 다음을 수행하십시오.
    • 매핑 탭에서 추가 또는 삽입을 클릭하십시오.
    • 실행 가능한 텍스트 상자에 DLL 로의 경로를 입력하거나 찾아보기를 클릭하여 탐색하십시오 (예 : ASP.NET 2.0 DLL은 C : Windows Microsoft.net Framework v2.0.50727 aspnet_isapi.dll에 있습니다. 기계)
    • 확장, 사용 ".*"인용문없이
    • 원하는 동사를 선택하십시오 (Get, Head, Post, Debug는 ASP.NET의 일반적인 것입니다).
    • "스크립트 엔진"또는 "애플리케이션 엔진"이 선택되었는지 확인하십시오.
    • "파일이 존재하는 확인"을 선택 취소하십시오.
    • 괜찮아요.

나는 이것에 꺼져 있을지 모르지만, 만약 내가 있다면, 누군가가 나를 바로 잡을 수 있기를 바랍니다. :)

다른 팁

IIS 와일드 카드 리디렉션을 사용해야합니다. 이와 같은 것이 필요합니다.

 *; www.example.com/*; www.example.com/default.aspx?article=$0

합리적인 참조가 있습니다 마이크로 소프트

Apache를 사용하는 경우 htaccess 파일을 수정해야한다고 생각합니다.

현재 Visual Studio 웹 서버에서 사이트를 테스트하고 있습니까? 일반적으로 "localhost : nnnnn"에서 사이트를 실행합니다. 여기서 "nnnnn"은 포트 번호 (위의 1234와 같이) 인 경우, 하나없이 실행하도록 설정하지 않습니다.

해당 컴퓨터에 IIS가 설치된 경우 프로젝트를 게시하면 코드에 아무것도없는 것으로 보이지 않으므로 "NNNN"없이 작동하는지 확인할 수 있어야합니다. 그렇게하십시오.

web.config 파일이 각 웹 사이트마다 동일했는지 확인하십시오 (가정 : 1234는 : 80과 다릅니다)

또한 LocalHost : 80을 사용해 보셨습니까?

당신의 http : // localhost/example/abc 당신이 기대하는 것처럼 Global.asax를 호출하지 않습니다. 일반적으로 http : // localhost 포트 80 (: 80)에서 실행 중입니다. 포트 80에서 사이트를 실행하려면 여기에서 실행하려면 IIS에 사이트를 배포해야합니다.

알 수없는 모든 확장을 ASP.NET으로 전달하려면 IIS에서 처리기 매핑을 설정해야합니다. 첫 번째는 Cassini가 모든 요청을 처리하고 있기 때문에 작동합니다. IIS가 해당 디렉토리를 찾고 있기 때문에 두 번째 요청은 작동하지 않으며, 코드를 실행하는 .NET 프레임 워크 대신 존재하지 않습니다.

다음은 방법에 대한 정보입니다 asp.net에서 URL 재 작성.

그래도 가능하다면 새로운 것을 사용하는 것이 좋습니다. 응용 프로그램 요청 라우팅 또는 urlrewrite.net

IIS는 기본적으로 모든 요청을 처리하기 위해 ASP.NET에 전달하지 않습니다. "ASPX"중 일부는 처리를 위해 ASP.NET으로 전달됩니다. 당신이 요청할 때 무슨 일이 일어나고 있는지 http : // localhost/example/abc IIS는 디렉토리를 찾아 해당 디렉토리에서로드 할 기본 파일 (예 : default.aspx, index.html)이 있는지 확인하려고합니다. 정크 "ABC"태그가있는 디렉토리를 찾을 수 없으므로로드 할 Default.aspx 파일을 찾지 못합니다.

로드하려고 할 때 http : //localhost/example/abc/default.aspx, IIS는 "ASPX"확장자를보고 처리를 위해 즉시 ASP.NET 런타임으로 넘겨줍니다. 그 이유 http : // localhost/example/abc 요청은로드되지 않아서 ASP.NET에 전달되지 않기 때문에 Global.asax는 결코 보지 못합니다.

Cassini 호스팅 사이트는 모든 요청을 처리하므로 ASP.NET 및 Global.asax 파일이 호출을 처리합니다.

Darren Kopp에 동의합니다. Darren Kopp은 IIS에서 핸들러 매핑을 설정하여 알 수없는 확장을 ASP.NET으로 전달해야한다고 제안했습니다.

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