【问题标题】:How to determine if the default document was served in traditional ASP?如何确定默认文档是否在传统 ASP 中提供?
【发布时间】:2008-12-18 00:45:16
【问题描述】:

在一个名为 index.asp 的文件中,该文件在 IIS 中设置为目录的默认文档,我试图通过 .asp VBScript 确定页面是否被称为默认文档而不是直接按名称调用,即我试图在服务器端区分这两种情况:

http://someurl/

http://someurl/index.asp

我知道如何在 ASP.NET 中执行此操作,但似乎无法使用相同的“服务器变量”。处理 URL 和脚本名称(PATH_INFO、SCRIPT_NAME、URL)的服务器变量都返回“index.asp”,而不管脚本调用的方式。

Google 搜索无法满足这一要求。有什么想法吗?

【问题讨论】:

  • 您是否在 Request.ServerVariables 上使用了基本迭代器来确定是否有任何可以使用?我现在不在我的机器前,所以我无法测试...
  • for each s in request.servervariables next
  • 我看错了你的问题,但是我试过了。除了我列出的三个之外,唯一包含脚本名称的其他变量是“PATH_TRANSLATED”,但这是一个物理路径,默认文档不会改变。

标签: asp-classic default-document


【解决方案1】:

服务器不会知道,但客户端会。在 JavaScript 中,您可以检查 location.href,然后使用 Ajax 调用将该值传递回服务器,以使用您想要的任何日志记录机制。

【讨论】:

  • 如果它被接受确实使用 javascript,那么这个解决方案是我认为最好的。 +1
【解决方案2】:

这个怎么样...
创建一个新文件 IndexDefault.asp 并将其设置为默认文档
在 IndexDefault.asp 中将其重定向到 Index.asp
在 IndexDefault.asp 中检查 IndexDefault.asp 的引用者。

【讨论】:

  • 我考虑过这一点,它可以达到目的,但我被要求提供一段插入式代码,客户将拒绝重新处理所有默认文档设置网站。如果没有人想出一种纯粹的编程方式,我会将此标记为答案。
  • 其实这样不行。服务器端 response.redirect 似乎没有设置 HTTP_REFERER。
  • 你可以有一个元刷新标签来重定向页面而不是服务器重定向。如果禁用了 javascript,则 Javascript-redirect 不是一个好的解决方案。
  • mdaustin。它不起作用,因为我忽略了一个步骤。不要使用 HTTP_Referer,只需让重定向链接包含一个查询字符串参数,目标页面可以查找该参数来识别重新路由的请求。
【解决方案3】:

与先前的答案类似,但创建一个新页面,将其命名为 homepage.asp,其中包含 #INCLUDE FILE="index.asp" 或让它执行 index.asp 的 server.transfer 或 server.execute将 Request.ServerVariables 脚本名称保留为 homepage.asp,因为请求对象在传递到 ASP 后不会更改脚本名称。然后你可以只测试这个值,你就不必依赖推荐人或进行重定向。不过,这仍然意味着您必须更改默认文档。

【讨论】:

    【解决方案4】:

    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>
    

    【讨论】:

      【解决方案5】:

      Request.ServerVariables("REQUEST_URI").item 将为您提供客户端请求的原始 url,包括查询字符串部分。

      它在 Request.ServerVariables 集合中不可枚举,并且没有一致地记录,但它在 IIS 10 中对我有用。我在这里找到它:https://docs.microsoft.com/en-us/iis/web-dev-reference/server-variables

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 2019-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多