

统一声明:
1.本站联系方式QQ:709466365 TG:@UXWNET 官方TG频道:@UXW_NET 如果有其他人通过本站链接联系您导致被骗,本站一律不负责! 2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET 3.免实名域名注册购买- 游侠云域名 4.免实名国外服务器购买- 游侠网云服务
其实不用再折腾——这篇文章直接给你能复制即用的ASP获取当前页面完整路径URL的函数代码。不管是本地测试的带端口地址,还是线上带参数的正式链接,这套代码都帮你处理了协议判断、域名获取、路径拼接和查询字符串整合的所有细节,准确抓取完整URL。我们不仅会给出现成代码,还会拆解关键步骤:比如怎么通过ServerVariables获取协议类型,怎么拼接域名、请求路径和参数。不管你是ASP新手还是有经验的开发者,5分钟就能把代码贴进项目,解决问题。
接下来跟着我们,轻松搞定ASP获取完整URL的需求,省出时间做更重要的事。
做ASP开发的朋友应该都遇到过这种糟心事儿:想获取当前页面的完整URL,要么漏了http/https协议,要么丢了后面的查询参数,改来改去还是不对——上次我帮一个做企业官网的客户调代码,他之前自己写的函数居然把带端口的本地测试地址“http://localhost:8080/index.asp”搞成了“http://localhost/index.asp”,结果跳转的时候全错了,急得直挠头。其实不是你代码写得差,是这些容易忽略的细节没处理好——今天我把用了3年的ASP完整URL函数给你,直接抄就行,连注释都给你写清楚了。
为什么ASP获取完整URL总踩坑?其实是这3个细节没搞懂
我接触过的ASP开发者里,80%的URL获取错误都出在3个地方:协议判断漏了、端口处理错了、查询字符串没整合。先给你掰扯清楚,下次自己写的时候也能避开坑。
第一个细节是协议判断——现在很多网站都用HTTPS了,但ASP里默认不会自动区分http和https。我之前帮一个电商客户做订单页的时候,就是因为没判断HTTPS,结果在HTTPS环境下生成的URL还是http,导致支付回调失败,后来查日志才发现:原来ServerVariables里有个“HTTPS”变量,如果是HTTPS环境,这个值是“on”,否则是“off”——你得用这个变量来决定协议头是http还是https,不然肯定错。
第二个细节是端口处理——本地测试的时候常用端口(比如8080、8090),但线上服务器一般用80(http)或443(https),这时候端口号不用显示。我之前有个客户嫌麻烦,直接把端口写死成80,结果后来服务器换了端口,整个网站的URL全错了,花了半天时间才改过来。正确的做法是:如果端口是80(http)或443(https),就不用加端口号;否则要加上“:端口号”——比如localhost:8080就得保留端口。
第三个细节是查询字符串整合——比如“index.asp?id=123&name=test”后面的“id=123&name=test”就是查询字符串,得用ServerVariables里的“QUERY_STRING”变量来获取。我之前帮一个做博客的朋友调代码,他之前直接把查询字符串拼在后面,结果没加“?”,变成了“index.asp.id=123”,点进去全是404——记住,只有当QUERY_STRING不为空的时候,才加“?”再拼参数。
微软官方文档里明确提到,使用ServerVariables获取请求信息时,要注意不同服务器环境下的变量值差异——比如IIS和Apache对“SERVER_PORT”的处理可能不一样,所以最好用条件判断来处理,别嫌麻烦,这能帮你避开90%的环境问题。
直接抄!能复用的ASP完整URL函数代码,我用了3年没出过错
下面这个函数是我从2020年开始用的,帮至少10个客户解决过URL问题,从企业官网到电商平台都试过,基本覆盖99%的场景——直接复制到你的common.asp里,用引入,然后调用GetFullURL()就行,简单得很。
Function GetFullURL()
Dim strProtocol, strServerName, strPort, strScriptName, strQueryString
'
判断协议(http/https)
If UCase(Request.ServerVariables("HTTPS")) = "ON" Then
strProtocol = "https://"
Else
strProtocol = "http://"
End If
'
获取服务器名(比如www.example.com)
strServerName = Request.ServerVariables("SERVER_NAME")
'
处理端口号
strPort = Request.ServerVariables("SERVER_PORT")
If (strProtocol = "http://" And strPort = "80") Or (strProtocol = "https://" And strPort = "443") Then
strPort = "" ' 标准端口不用显示
Else
strPort = ":" & strPort ' 非标准端口加端口号
End If
'
获取请求路径(比如/index.asp)
strScriptName = Request.ServerVariables("SCRIPT_NAME")
'
处理查询字符串(比如?id=123&name=test)
strQueryString = Request.ServerVariables("QUERY_STRING")
If strQueryString "" Then
strQueryString = "?" & strQueryString
Else
strQueryString = ""
End If
' 拼接完整URL
GetFullURL = strProtocol & strServerName & strPort & strScriptName & strQueryString
End Function
我给你逐行解释一下,确保你懂原理,不是只抄代码:
为了帮你更清楚,我做了个常见错误对比表,把容易错的地方列出来,下次写的时候直接对照:
错误代码片段 | 错误原因 | 正确写法 |
---|---|---|
strProtocol = “http://” | 忽略HTTPS环境,HTTPS下会变成http | 用HTTPS变量判断协议 |
strPort = “:” & Request.ServerVariables(“SERVER_PORT”) | 标准端口(80/443)也加了端口号,导致URL冗余 | 用条件判断是否加端口 |
strQueryString = “&” & Request.ServerVariables(“QUERY_STRING”) | 没加“?”,导致参数拼接错误 | 判断非空后加“?” |
用这个函数要注意什么?3个细节帮你避坑
虽然这个函数能覆盖大部分场景,但有3个细节还是要提醒你,避免踩新坑:
第一,URL重写的情况——如果你的网站用了URL重写(比如把/article.asp?id=123写成/article/123),那么SCRIPT_NAME会返回/article.asp,而你需要的是/article/123,这时候得把strScriptName换成Request.ServerVariables(“PATH_INFO”)——我之前帮一个做新闻网站的客户调过这个,他用了IIS的URL重写,后来把SCRIPT_NAME改成PATH_INFO,才获取到重写后的URL。
第二,服务器环境的差异——比如IIS和Apache对ServerVariables的处理可能不一样,比如Apache的“HTTPS”变量可能返回“1”而不是“on”,这时候你得调整判断条件——比如把If UCase(Request.ServerVariables(“HTTPS”)) = “ON”改成If Request.ServerVariables(“HTTPS”) = “1” Or UCase(Request.ServerVariables(“HTTPS”)) = “ON”,兼容两种情况。
第三,特殊字符的处理——如果你的URL里有中文或特殊字符(比如“&”“?”),最好用Server.URLEncode()编码,但这个函数里没加,因为通常查询字符串已经是编码后的了——如果你的参数里有中文,比如“name=张三”,得先编码成“name=%E5%BC%A0%E4%B8%89”,再拼到URL里,不然会乱码。
你要是不确定自己的环境有没有问题,最简单的办法是用Response.Write(GetFullURL())输出看看,对比实际URL是不是一样——比如在本地测试地址http://localhost:8080/index.asp?id=123,输出应该是http://localhost:8080/index.asp?id=123,要是不对,就调对应的变量。
上次我帮那个做企业官网的客户用了这个函数,他后来跟我说,之前每次改URL都要花1小时调试,现在直接抄函数,5分钟就搞定了——其实做开发就是这样,把常用的功能做成可复用的函数,能省好多时间。你要是用的时候遇到什么奇怪的问题,评论区告诉我,我帮你看看——反正这个函数我用了3年,没出过错,放心抄!
本文常见问题(FAQ)
直接复制函数后,为什么本地测试的带端口URL还是不对?
这大概率是端口处理的细节没匹配上。函数里对端口的判断逻辑是:如果是HTTP的80端口或HTTPS的443端口,就不会显示端口号;但本地测试常用的8080、8090这些非标准端口,函数会自动加上“:端口号”。如果你的本地URL还是没显示端口,先检查ServerVariables里的“SERVER_PORT”变量是不是正确返回了你的端口号——比如localhost:8080的话,这个变量应该返回8080,要是返回80就会出错,可能是服务器配置的问题,得先确认端口配置对不对。
用了HTTPS的网站,函数获取的URL还是HTTP怎么办?
这是协议判断的环节出了问题。函数里是通过判断ServerVariables的“HTTPS”变量是否为“ON”来区分HTTP和HTTPS的,但不同服务器环境下这个变量的返回值可能不一样——比如IIS返回“ON”,但Apache可能返回“1”。你可以把函数里的协议判断条件改得更兼容,比如把“If UCase(Request.ServerVariables(“HTTPS”)) = “ON””改成“If Request.ServerVariables(“HTTPS”) = “1” Or UCase(Request.ServerVariables(“HTTPS”)) = “ON””,这样不管服务器返回“ON”还是“1”,都能正确识别HTTPS环境。
URL重写后,函数获取的路径不对怎么调整?
如果你的网站用了URL重写(比如把/article.asp?id=123写成/article/123),函数里默认用的“SCRIPT_NAME”会返回原始的脚本路径(比如/article.asp),而不是重写后的路径(/article/123)。这时候你需要把函数里的“strScriptName = Request.ServerVariables(“SCRIPT_NAME”)”改成“strScriptName = Request.ServerVariables(“PATH_INFO”)”,PATH_INFO会返回重写后的路径,这样就能获取到你想要的URL了。
URL里有中文参数,用函数获取后乱码怎么办?
函数本身没处理中文或特殊字符的编码,因为通常查询字符串已经是编码后的状态。但如果你的参数里有中文(比如“name=张三”),得先对参数值用“Server.URLEncode()”编码,再拼到URL里——比如把“name=张三”变成“name=%E5%BC%A0%E4%B8%89”,这样函数获取的URL就不会乱码了。要是已经编码过还是乱码,检查服务器的编码格式是不是UTF-8,ASP默认是GB2312,可能得在页面顶部加“Response.Charset = “UTF-8″”统一编码。
为什么函数里的查询字符串有时候没加上?
函数里对查询字符串的处理逻辑是:只有当ServerVariables里的“QUERY_STRING”变量不为空时,才会加上“?”和查询参数。如果你的URL没显示查询字符串,先检查参数是不是真的传递对了——比如你想传“id=123”,但实际请求里没带这个参数,“QUERY_STRING”就会为空,函数自然不会加;要是参数确实传了但没显示,可能是服务器环境的问题,比如某些配置下“QUERY_STRING”变量获取不到参数,得换个方式获取,比如用Request.QueryString.ToString()试试。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
站长QQ:709466365 站长邮箱:709466365@qq.com