在一个名为index.asp的文件中,它在IIS中设置为目录的默认文档,我试图通过.asp VBScript确定该页面是否作为默认文档而不是直接按名称调用,即我试图区分服务器端的这两种情况:
我知道如何在ASP.NET中执行此操作,但似乎没有相同的“服务器变量”。无论脚本调用的方式如何,处理URL和脚本名称(PATH_ INFO,SCRIPT_NAME,URL)的服务器变量都返回“index.asp”。
谷歌搜索不足于此。有什么想法吗?
答案 0 :(得分:1)
服务器不会知道,但客户端会知道。在JavaScript中,您可以检查location.href
,然后使用对所需记录机制的Ajax调用将该值传递回服务器。
答案 1 :(得分:0)
这个怎么样...
创建一个新文件IndexDefault.asp并将其设置为默认文档
在IndexDefault.asp中,将其重定向到Index.asp
在IndexDefault.asp中,检查IndexDefault.asp的引用者。
答案 2 :(得分:0)
与之前的答案类似,但是创建一个新页面,将其称为homepage.asp,它具有#INCLUDE FILE =“index.asp”或者让它执行server.transfer或server.execute of index.asp保持Request.ServerVariables脚本名称为homepage.asp,因为请求对象一旦传递到ASP就不会更改脚本名称。然后你可以测试这个值,你不必依赖referrer或必须进行重定向。这仍然意味着你必须更改默认文档。
答案 3 :(得分:0)
Diodeus是正确的,客户端JavaScript似乎是检测URL的唯一方法。所有其他选项都需要将内容页面和默认文档页面区分为单独的文件。所有我真正想要做的就是将两个请求压缩到默认文档URL中(在直接请求index.asp的情况下重定向)。
为了满足这是一个单独的代码片段的要求,我最终使用了这个JavaScript块:
<script language="javascript" type="text/javascript">
var loc = window.location.href;
var re = /\/index.asp/i;
if (loc.search(re) != -1) {
window.location.href = loc.replace (re,"/");
}
</script>
答案 4 :(得分:0)
Request.ServerVariables("REQUEST_URI").item 将为您提供客户端请求的原始 url,包括查询字符串部分。
它在 Request.ServerVariables 集合中不可枚举,也没有一致记录,但它在 IIS 10 中对我有用。我在这里找到它:https://docs.microsoft.com/en-us/iis/web-dev-reference/server-variables