【问题标题】:How do I get root url using ASP not ASP.net如何使用 ASP 而不是 ASP.net 获取根 URL
【发布时间】:2011-12-22 06:41:36
【问题描述】:

如何使用 ASP 而不是 ASP.net 获取根 URL? 我发现了这个问题( How do I get the site root URL? )

但它与ASP.net有关。

======================================

阿巴斯的回答为我提供了

父站点根地址

但不向我提供子站点根 url

======================================

【问题讨论】:

标签: asp-classic


【解决方案1】:

这应该可以得到你想要的。

getSiteURL()

Function getSiteURL()

    dim port
    dim https 
    dim domainname
    dim filename
    dim querystring
    dim fullpath
    dim url

    port = "http" 
    https = lcase(request.ServerVariables("HTTPS")) 
    if https <> "off" then port = "https" 
    domainname = Request.ServerVariables("SERVER_NAME") 
    filename = Request.ServerVariables("SCRIPT_NAME") 
    querystring = Request.ServerVariables("QUERY_STRING") 
    fullpath = port & "://" & domainname & Request.ServerVariables("SCRIPT_NAME")
    filename = right(fullpath, InStr(StrReverse(fullpath), StrReverse("/")))

    url = Replace(fullpath, filename, "/")

    response.write url & "<br>" 
end Function 

【讨论】:

  • 不,它没有。它提供了我调用函数的部分 url。例如,如果我从这个页面 parentSite/childsite/Folder/Default.asp 调用该函数,它会返回 parentSite/childsite/Folder
  • 那么我想我不确定你想要什么?我发布的内容将返回您所在页面的路径。页面上的功能是否与您想要显示的不同?您将获取 URL 的页面在哪里?您可能必须将信息传递给函数才能使用它。
  • 希望返回 parentSite/childSite 作为子站点的根 url
  • 如果将创建 URL 的页面位于文件夹下,那么您需要解析出所需的 URL 或将其从调用页面传递给函数。使用我发布的内容,如果你知道你想要的链条有多远,你可以解析出来。
  • 由于我需要子站点/父站点的根 url,如果它在编程上很困难,最好将其保持为常量。顺便说一句,@Abbas 的解决方案返回父站点的根 url,而不是子站点。
【解决方案2】:

经典 ASP 有一个包含所有服务器和环境详细信息的 Request.ServerVariables 集合。下面是示例 .NET 代码的经典 ASP 版本的样子:

function getSiteRootUrl()
    dim siteRootUrl, protocol, hostname, port

    if Request.ServerVariables("HTTPS") = "off" then
        protocol = "http"
    else
        protocol = "https"
    end if
    siteRootUrl = protocol & "://"

    hostname = Request.ServerVariables("HTTP_HOST")
    siteRootUrl = siteRootUrl & hostname        

    port = Request.ServerVariables("SERVER_PORT")
    if port <> 80 and port <> 443 then
        siteRootUrl = siteRootUrl & ":" & port
    end if

    getSiteRootUrl = siteRootUrl
end function

【讨论】:

  • 如果我的站点 url 是 parentSite/subsite/default.asp,上面会返回 parentSite/subsite 作为根 url 吗?
  • 我已将 .NET 代码翻译为经典 ASP,因此它将执行您示例中的代码所做的工作。如果您的站点未使用 SSL 并使用端口 80,上面的代码将显示:http:// parentSite/subsite。理解它的最好方法是运行它并玩弄它。这很简单,如果您遇到困难,可以在这里发布。
  • 我已经测试过,它没有转到子站点
  • 如我所说,我翻译了这个例子。从您的问题来看,尚不清楚您需要什么。没有直接的方法可以得到你需要的东西。 Request.ServerVariables("URL") 和 Request.ServerVariables("PATH_INFO") 包含脚本的路径,包括子文件夹。通过解析这些变量,你应该可以得到你所需要的。
  • @Abbas:很接近了,假设 HTTPS 通过端口 80 运行,HTTP 通过端口 443 运行(这样做会很疯狂,但从技术上讲这是可能的)。
【解决方案3】:

虽然这是一个非常古老的问题,但我怀疑 Hoque 要求的是页面之前的所有内容。例如,如果 URL 是 http://www.example.com/subsite/default.asp?a=1&amp;b=2,则预期的返回值将是 http://www.example.com/subsite

Function GetSitePath()
    Dim address, port, url
    address = "http://"
    If LCase(Request.ServerVariables("HTTPS")) = "off" Then address = "https://"
    address = address & Request.ServerVariables("SERVER_NAME")
    port = Request.ServerVariables("SERVER_PORT")
    If port <> 80 And port <> 443 Then address = address & ":" & port
    url = Request.ServerVariables("URL")
    address = address & Left(url, InstrRev(url, "/"))
    GetSitePath = address
End Function

请注意,我在这里没有包含错误检查,以防止错误的 URL,但如果这导致错误,我会怀疑发生了一些更绝望的事情!

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 2021-08-05
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2016-09-29
    相关资源
    最近更新 更多