문제

나는 최근에 마이그레이션 웹사이트 새로운 CMS(Umbraco).많은 링크를 변경했지만,그들은 쉽게 수정하여 검색에 대한 패턴의 url,그래서 나는 뭔가를 쓰는 리디렉션됩니다 올바른 페이지는 경우 오래된 하나입니다 찾을 수 없습니다.는 부분이 문제가 되지 않습니다.

어떻게 얻을 수 있는 요청한 URL 을 후에는 브라우저로 리디렉션된 내용 404 페이지입니다.용:

request.ServerVariables("HTTP_REFERER") 'sorry i corrected the typo from system to server.

하지만 그 작동하지 않았다.

어떤 아이디어가?

사이트에서 IIS6.0.우리가 사용을 고려 301 리디렉션,하지만 우리는 어떤 방법이 없는 것을 알고 페이지를 북마크 사람들은 고기가 몇백지,그래서 아무도에 대한 예리한 지출 시간을 만들 301 습니다.

도움이 되었습니까?

해결책

기본적으로 사용자 정의 404 오류 처리 페이지에서 묻는 것과 동일합니다. IIS 6에서 원래 URL은 쿼리 문자열에 있습니다. 아래 코드는 원래 URL을 잡은 다음 사용자를 전달하는 방법을 보여줍니다. 내 경우에는 오래된 ASP에서 New ASP.NET으로 전환 했으므로 모든 .asp 페이지를 .aspx 페이지로 전달해야했습니다. 또한 일부 URL이 변경되어 이전 URL과 앞으로 키워드를 찾습니다.

//did the error go to a .ASP page?  If so, append x (for .aspx) and 
//issue a 301 permanently moved
//when we get an error, the querystring will be "404;<complete original URL>"
string targetPage = Request.RawUrl.Substring(Request.FilePath.Length);

if((null == targetPage) || (targetPage.Length == 0))
    targetPage = "[home page]";
else
{
     //find the original URL
    if(targetPage[0] == '?')
    {
        if(-1 != targetPage.IndexOf("?aspxerrorpath="))
             targetPage = targetPage.Substring(15); // ?aspxerrorpath=
        else
             targetPage = targetPage.Substring(5); // ?404;
        }
        else
        {
             if(-1 != targetPage.IndexOf("errorpath="))
             targetPage = targetPage.Substring(14); // aspxerrorpath=
             else
            targetPage = targetPage.Substring(4); // 404;
        }
    }               

    string upperTarget = targetPage.ToUpper();
    if((-1 == upperTarget.IndexOf(".ASPX")) && (-1 != upperTarget.IndexOf(".ASP")))
    {
        //this is a request for an .ASP page - permanently redirect to .aspx
        targetPage = upperTarget.Replace(".ASP", ".ASPX");
        //issue 301 redirect
        Response.Status = "301 Moved Permanently"; 
        Response.AddHeader("Location",targetPage);
        Response.End();
    }

    if(-1 != upperTarget.IndexOf("ORDER"))
    {
                //going to old order page -- forward to new page
               Response.Redirect(WebRoot + "/order.aspx");
           Response.End();
    }

다른 팁

어때요 :

Request.ServerVariables("HTTP_REFERER");

많은 링크를 변경했지만,그들은 쉽게 수정하여 검색에 대한 패턴 url

보내는 것보다 귀하의 사용자가 404 을 고려하고 url 을 사용하여 다시 쓰기?이 방법은 사용자(고,검색 엔진 경우에는 중요하다이 경우에 당신)을 얻을 수 301 이나 302 하는 것 보다는 가을 통해 404 처리기입니다.그것은 일반적으로 더 빠르고 스트레스를 덜 서버에서 처리하는 재작성 url 수준 이상을 발사 코드 및 처리합니다.

Microsoft 표 URL 재작성을 위한 모듈 IIS7, 이 괜찮은 소개 그 .

IIS6 가 여기에 잘 소개 을 얻 URL 재작성한 작업,그것보다 약간 다른 IIS7.

예를 들어 재작성 규칙의 것

# $1 will contain the contents of (.*) - everything after new-dir/
RewriteRule /new-dir/(.*) /find_old_page.asp?code=$1 

몇 백 페이지,아무도에 대한 날카로운 시간을 보내게 만들 301 의

의 아름다움을 재작성 규칙은 당신이 필요하지 않 목록에 명시적으로 목록에 당신의 모든 페이지를 쓸 수 있는 규칙에 따라 동일한 패턴이다.우리가 무언가를 하는 이와 유사한 최근에,그것은 놀라운 일이 얼마나 많은 이동된 url 을 처리할 수 있으로의 몇 가지 간단한 규칙이 있습니다.

404 페이지를 사용하는 대신, 적절한 일은 301- 영구적으로 이동했습니다 암호.

404 페이지의 init에서 우리가하는 일은 다음과 같습니다.

Dim AttemptedUrl As String = Request.QueryString("aspxerrorpath")
If Len(AttemptedUrl) = 0 Then AttemptedUrl = Request.Url.Query
AttemptedUrl = LCase(AttemptedUrl)
CheckForRedirects(AttemptedUrl)

CheckForRedirects에는 오래된 URL을 새 URL과 일치시키는 사용자 정의 로직이 있습니다.

나는 이것이 기존 시스템의 많은 URL을 새 시스템과 일치시키기에 충분한 정보가 충분하다면 (301S 또는 URL 재 작성과 대조적으로) 선호되는 접근법이라고 주장합니다. 예를 들어 일치하는 테이블이있는 경우 새 ID 또는 비슷한 정보가있는 오래된 ID.

그러나 이전 URL을 Regex를 사용하여 새 URL에 매핑하는 데 사용할 수있는 일관된 패턴이 있으면 URL 재 작성이 진행됩니다.

재 작성 제안을 구축하려면 Umbraco는 이미 UrlrewriTing.net을 사용하고 있으며 새로운 재 작성을 추가 할 수 있습니다.

\config\UrlRewriting.config

도움이 되었기를 바랍니다

업데이트, 실제로 픽업하고 싶습니다.

vb.net :

Request.QueryString("aspxerrorpath")

씨#:

Request.QueryString["aspxerrorpath"];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top