このコードを含むグローバルinclude.asp
ファイルがあります:
if SomeCondition then
Response.Clear
Response.Status = "404 Not Found"
Server.Execute "/error404.asp"
Respnse.End
end if
他の2つのファイル、content.asp
およびerror404.asp
#includeこのファイル。
コンテンツファイルはSomeConditionをtrueに設定し、エラーページをServer.Executeに設定します。ただし、エラーページ内でも同じ条件が当てはまります。これにより無限ループが発生し、次のエラーが発生します。
Server object error 'ASP 0227 : 80004005'
Server.Execute Failed
/include.asp, line 1111
The call to Server.Execute failed
どうすれば無限ループを回避できますか?私はこれらの回避策を念頭に置いていました:
A
if SomeCondition then
if GetExecutedFileNameSomehow() <> "error404.asp" then
' ...
end if
end if
しかし、コードからエラーファイルの名前を取得できないようです(サーバー変数の内部を調べました。すべてのポイント変数は呼び出し元のファイル、つまりコンテンツを参照しています)。
B
共有変数を使用します。たとえば、コンテンツファイルでBeingExecuted = trueを設定し、エラーファイル内で確認しますが、Server.Executeの問題は、実行されたスクリプトが呼び出し元のファイルの変数にアクセスできないことです。
ご意見をお聞かせください。