Синтаксический анализ и перезапись URL

#asp.net #url

#asp.net #url

Вопрос:

Я пытаюсь настроить CMS для запуска на моем компьютере, чтобы я мог ее модифицировать. Я усердно работал, чтобы настроить его и убедиться, что он собран. Это не мой код, поэтому мне трудно его понять. Приложение создается без ошибок и подключено к базе данных.

Я могу без проблем перейти в раздел администратора, но когда я пытаюсь просмотреть страницу по умолчанию, я получаю ошибку 404. Global.asax анализирует URL-адрес и пытается получить что-либо из XML. Я не знаком с этой техникой создания контента, поэтому я прошу помощи, чтобы заставить сайт работать, чтобы я мог добавить функции, которые я предполагаю добавить.

Вот код, который анализирует URL

    Protected Sub Application_BeginRequest(ByVal s As Object, ByVal e As System.EventArgs)

    If Request.ServerVariables("HTTP_USER_AGENT").ToString = "NV32ts" Then Response.End()

    Dim webben As HttpApplication = DirectCast(s, HttpApplication)

    'webben.Response.Write(webben.Request.Path amp; "<br />")

    'webben.Response.Write(m_Context.Request.ApplicationPath)
    'webben.Response.End()

    'webben.Response.Write(webben.Server.MapPath(webben.Request.ApplicationPath amp; "/sitemap.xml"))
    'webben.Response.End()

    Dim incomingUrl As String = webben.Request.Url.ToString.ToLower.Trim

    If incomingUrl.IndexOf("fckeditor") > -1 Then Exit Sub
    If incomingUrl.IndexOf("admin") > -1 Then Exit Sub
    If incomingUrl.IndexOf(".axd") > -1 Then Exit Sub
    If incomingUrl.IndexOf(".asmx") > -1 Then Exit Sub
    If incomingUrl.IndexOf("checkoutpayment.aspx") > -1 Then Exit Sub


    'Nytt som rensar bort sidan, för att komma till rätta med 1.asp som istället kan vara pa-gang.aspx
    Dim inc As String = incomingUrl
    If inc.IndexOf(".asp") > 0 Then inc = inc.Substring(0, inc.IndexOf(".asp"))
    If inc.EndsWith("/1") Then inc = inc.Substring(0, inc.Length - 2)
    'inc = inc.Replace("/1.aspx", "")
    'inc = inc.Replace(".aspx", "")


    Dim pieces As String() = incomingUrl.Split("/")
    'Dim lastPiece As String = pieces(pieces.GetUpperBound(0) - 1) 'Egentligen näst sista: pa-gang
    Dim lastPiece As String = pieces(pieces.GetUpperBound(0)) 'Den absolut sista istället, eftersom jag rensar bort ovan

    ' End if following
    'If incomingUrl.IndexOf("webresource.axd") > -1 Then Exit Sub
    'If incomingUrl.IndexOf("jsdebug") > -1 Then Exit Sub
    'If incomingUrl.IndexOf("adminlanguages") > -1 Then Exit Sub
    'If incomingUrl.IndexOf("adminmenus") > -1 Then Exit Sub
    'If incomingUrl.IndexOf("adminpages") > -1 Then Exit Sub
    'If lastPiece = "admin" Then Exit Sub
    ' ----------------

    Dim start As String = ""
    start = pieces(0) amp; "/" amp; pieces(1) amp; "/" amp; pieces(2)
    If pieces(2) = "localhost" Then start amp;= "/" amp; pieces(3)

    Dim outgoingUrl As String = ""
    Dim template As String = ""
    Dim lang As String = ""
    Dim menus As String = ""
    Dim page As String = ""


    'Fix för att xml-filernas länkar ska fungera
    If incomingUrl.Contains("~") Then
        Dim tmp() As String = incomingUrl.Split("~")
        webben.Response.Redirect(start amp; tmp(1), True)
    End If


    Dim xmlpath As String = inc.Replace(start, "")
    'xmlpath = .Replace("/" amp; pieces(pieces.GetUpperBound(0)), "")

    If xmlpath.EndsWith("/") Then
        xmlpath.Substring(0, xmlpath.Length - 1) 'Ta bort ev avslutande /
    End If
    If xmlpath = "/" Then xmlpath = ""


    If xmlpath = "" Then Exit Sub


    Dim doc As New XmlDocument
    Dim path As String = webben.Server.MapPath("~/_uploads/sitemap.xml")
    doc.Load(path)


    'Fix för numeriska namn, släng på en _ i början för att funka i xml-filen
    Dim tmpPathParts() As String = xmlpath.Split("/")
    Dim tmpPath As String = "" '/"
    For i As Integer = 0 To tmpPathParts.GetUpperBound(0)
        If tmpPathParts(i).Length > 0 Then tmpPath amp;= "/"
        If tmpPathParts(i).Length > 0 AndAlso IsNumeric(tmpPathParts(i).Substring(0, 1)) Then
            tmpPath amp;= "_" amp; tmpPathParts(i)
        Else
            tmpPath amp;= tmpPathParts(i)
        End If
    Next
    'Response.Write(tmpPath amp; "<br />")
    'Response.Write(xmlpath amp; "<br />")
    'Response.End()

    xmlpath = tmpPath


    Dim nodes As XmlNodeList = doc.GetElementsByTagName(lastPiece)
    Dim parent As XmlNode = doc.SelectSingleNode("/root" amp; xmlpath) ' nodes(0)
    'KAN OVANSTÅENDE FUNGERA? TESTA!

    If parent Is Nothing Then Exit Sub

    While Not (parent Is Nothing)
        If parent.NodeType = XmlNodeType.Document Then Exit While
        If parent.Attributes("rootid") Is Nothing Then
            'Response.Write("Value: " amp; parent.ToString amp; "<br />")
            'Response.Write("Att: " amp; parent.Attributes("id").Value amp; "<br />")
            'Response.Write("sad: " amp; parent.LocalName amp; "<br />")

            If Not parent.Attributes("langid") Is Nothing Then
                lang = parent.Attributes("langid").Value
            ElseIf Not parent.Attributes("menuid") Is Nothing Then
                If menus <> "" Then
                    menus amp;= ","
                End If

                menus amp;= parent.Attributes("menuid").Value
            Else
                page = parent.Attributes("pageid").Value
            End If

            If template = "" Then
                template = parent.Attributes("template").Value
            End If

        End If

        parent = parent.ParentNode
    End While

    outgoingUrl = template amp; "?l=" amp; lang amp; "amp;m=" amp; menus amp; "amp;p=" amp; page

    'Response.Write(m_Context.Request.ApplicationPath amp; "/" amp; outgoingUrl)
    'Response.End()

    webben.Context.RewritePath(HttpRuntime.AppDomainAppVirtualPath amp; "/" amp; outgoingUrl, True)
End Sub
  

Комментарии:

1. Спасибо @jadarnel27. Но я не совсем понимаю. Является ли честность проблемой на этом форуме? 😛