Asp classic 获取ASP classic中Server.Executed文件的名称

Asp classic 获取ASP classic中Server.Executed文件的名称,asp-classic,vbscript,Asp Classic,Vbscript,我有一个全局include.asp文件,其中包含以下代码: if SomeCondition then Response.Clear Response.Status = "404 Not Found" Server.Execute "/error404.asp" Respnse.End end if 另外两个文件,content.asp和error404.asp#包含此文件 内容文件将SomeCondition设置为tru

我有一个全局
include.asp
文件,其中包含以下代码:

if SomeCondition then
    Response.Clear
    Response.Status = "404 Not Found"
    Server.Execute "/error404.asp"
    Respnse.End
end if
另外两个文件,
content.asp
error404.asp
#包含此文件

内容文件将SomeCondition设置为true,从而导致错误页转到Server.Execute。然而,在错误页面中,同样的情况也是如此。这将创建一个无限循环,并导致以下错误:

Server object error 'ASP 0227 : 80004005'
Server.Execute Failed
/include.asp, line 1111
The call to Server.Execute failed
如何避免无限循环?我想到了这些解决办法:

A.
如果出现某种情况
如果GetExecutedFileNameSomehow()“error404.asp”,则
' ...
如果结束
如果结束
但我似乎无法通过代码获得错误文件的名称(我已经查看了服务器变量内部,所有点变量都指向调用文件,即内容)

B 在内容文件中使用共享变量,例如set BeingExecuted=true,并在错误文件中进行检查,但Server.Execute的问题是,执行的脚本无法访问调用文件的变量


请给出建议。

如果您真的必须在404.asp中包含include.asp,我希望您的“Somecondition”测试在子函数或函数中。您可以在include.asp中定义一个变量,然后在404.asp中将其设置为true,并在您的条件下进行测试

因此:

内部包含.asp

Dim blnNot404page : blnNot404page = true
blnNot404page = false
在404.asp内部(以及在包含include.asp之后在代码中的非课程)

再次使用include.asp

if (SomeCondition and blnNot404page) then
    Response.Clear 
    Response.Status = "404 Not Found"
    Server.Execute "/error404.asp"
    Response.End
end if

您是对的,由于Server.Execute的性质,被调用的脚本不知道它的真正来源,我也没有找到任何方法来找到它

也就是说,我担心您将不得不求助于难看的解决方法,我能想到的最可靠的方法是使用会话变量作为“共享变量”

在include.asp中包含以下代码:

strFileToExecute = "/error404.asp"
If (Session("currently_executing")<>strFileToExecute) And (SomeCondition) Then
    Response.Clear
    Response.Status = "404 Not Found"
    Session("currently_executing") = strFileToExecute
    Server.Execute strFileToExecute
    Session("currently_executing") = ""
    Response.End
End If
strFileToExecute=“/error404.asp”
如果(会话(“当前正在执行”)strFileToExecute)和(SomeCondition),则
回答,清楚
Response.Status=“404未找到”
会话(“当前正在执行”)=strFileToExecute
服务器。执行strFileToExecute
会话(“当前正在执行”)=“”
答复.完
如果结束

逻辑是在调用Execute方法之前设置Session变量。这样,当执行error404.asp并再次包含相同的代码时,会话变量的值将被设置,并且您知道如何中止操作,从而避免无休止的循环。

恐怕这不起作用。外部脚本(content.asp/include.asp)中设置的脚本变量在执行的脚本(error.asp/include.asp)中不可见,反之亦然。ASP就是这样。我没想到。。。然后我会对一个过程进行函数调用,将变量设置为false。它应该可以工作,但我稍后会尝试测试它,一旦我有了poc,就用它更新我的答案。刚刚测试过。。我可以很好地访问包含脚本中的变量。。因此,不需要setter函数的开销。我的解决方案只有在include.asp中的代码块位于函数/sub内时才起作用。。否则外部脚本无法足够快地调整参数。。也许您更应该使用server.transfer。这样,您就可以使用request.servervariables(“script_name”)来定义您的应用程序是否在404.asp中。。或者更可能的是,这是唯一有效的方法/
strFileToExecute = "/error404.asp"
If (Session("currently_executing")<>strFileToExecute) And (SomeCondition) Then
    Response.Clear
    Response.Status = "404 Not Found"
    Session("currently_executing") = strFileToExecute
    Server.Execute strFileToExecute
    Session("currently_executing") = ""
    Response.End
End If