【问题标题】:ASP - Determine if current Script is being run as an includeASP - 确定当前脚本是否作为包含运行
【发布时间】:2009-08-26 22:06:07
【问题描述】:

假设我有以下页面:

# Include.asp
<%
Response.Write IsIncluded() & "<br>"

%>

# Outside.asp
<!--#include file="Include.asp" --> 

我需要这样才能工作,如果我直接访问 http://Example.com/Include.asp,我会看到“True”,但如果我访问 http://Example.com/Outside.asp,我会看到 False。我宁愿不必向Outside.asp 添加任何内容。谁能想到在 ASP 中创建这样一个 IsIncluded 函数的方法?通过比较__FILE__ 和$_SERVER['PHP_SELF'],我能够在PHP 中创建这样的函数,但这在这里行不通,因为ASP 没有我知道的__FILE__ 之类的东西。

【问题讨论】:

    标签: asp-classic include server-side-includes


    【解决方案1】:

    尝试检查请求的 URL 并将其与包含匹配。 JavaScript 中提供的示例

    function IsIncluded() {
      var url = String(Request.ServerVariables("URL"));
      url = url.substring(0, url.indexOf("?")).substring(0, url.indexOf("#")).substr(url.lastIndexOf("/"));
      return (url == "Include.asp")
    }
    

    【讨论】:

    • 如果我有一个返回字符串“Inclue.asp”的函数,但我没有......可能最终不得不做类似的事情,因为我不确定这样事情是可能的。
    • 一个机会是抛出异常并捕获它,然后调用 Server.GetLastError w3schools.com/asp/asp_ref_error.asp
    • @DrFredEdison:我不确定我是否理解这句话“如果我有一个返回字符串“Inclue.asp”的函数,但我没有”?为什么需要一个“函数”来返回“Include.asp”,建议的代码将存在于Include.asp文件中,所需要的只是让包含文件有一个与其名称匹配的文字字符串。跨度>
    • 我想说的是,我更喜欢一个不管包含名称如何都可以工作的函数。但是,我真的只需要一个地方,所以这个解决方案就足够了。
    【解决方案2】:

    通常在 ASP 中,让包含文件也可用作客户端可以获取的东西并不是一个好的做法。如果您特别想阻止客户端获取包含文件,请将您的包含文件放在一个文件夹中(称为“包含”),然后在 IIS 中阻止对该文件夹的访问。

    如果您确实希望用户能够按原样访问包含文件并且还允许其他页面包含它,那么为包含创建一个“主机”页面。例如:-

    # /Includes/Include.asp
    <%
    %>
    
    # IncludeHost.asp
    <!-- #include virtual="/Includes/Include.asp" -->
    
    # Outside.asp
    <!-- #include virtual="/Includes/Include.asp" -->
    <%
       '' #Other content/code here
    %>
    

    您现在可以将直接访问“include.asp”时特有的代码和内容移动到 IncludeHost.asp 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2017-05-03
      相关资源
      最近更新 更多