我有一个自定义的ColdFusion错误页面,经常在机器人扫描页面后反复返回以下错误:
在ERROR中未定义元素REMOTEADDRESS。 错误发生在###(页码)上。
我不确定为什么它会返回这个未定义的元素错误,或者是否有办法解决它,除了删除#error.remoteAddress#code。
我的代码如下所示:
<cferror type="REQUEST" template="error.cfm" mailto="email@domain.com">
<cfoutput>
<ul>
<li><strong>Your Location:</strong> #error.remoteAddress#
<li><strong>Your Browser:</strong> #error.browser#
<li><strong>Date and Time the Error Occurred:</strong> #error.dateTime#
<li><strong>Page You Came From:</strong> #error.HTTPReferer#
<li><strong>Error Diagnostics</strong>:
<p>#error.diagnostics#</p>
</ul>
</cfoutput>
答案 0 :(得分:3)
您应该使用Edward的解决方案来验证变量的存在,或者使用cfparam值使其始终存在:
<cfparam name="Error.remoteAddress" default="No Remote Address" />
答案 1 :(得分:2)
如果您不想完全理解此处的整体逻辑,如果您希望能够在尝试评估变量或结构成员之前安全地进行测试,那么您可以执行类似
的操作<cfif isDefined("error") AND structKeyExists(error, "remoteAddress")>#error.remoteAddress#</cfif>
答案 2 :(得分:2)
remoteAddress仅在request and exception type errors中可用,因此请在显示错误变量之前检查错误类型。
<cfif ListFind("request,exception",error.type)>
<li><strong>Your Location:</strong> #error.remoteAddress#</li>
</cfif>
您还可以检查错误类型不是“验证”,但我喜欢成为一个积极的人。
PS。注意我关闭了你的清单项目。 ;)