Oracle Apex如何将Checksum错误页调整为404 Not Found页面
Oracle Apex 无效URL跳转404而非校验错误的实现方案
方案1:Web代理/服务器层前置拦截(推荐)
- 适配场景:使用Nginx、Apache或者Oracle HTTP Server(OHS)作为Apex前置代理时,该方案性能最高,不会将无效请求转发到Apex后端
- 实现逻辑:预先定义合法的Apex URL格式规则,所有不符合规则的请求直接返回404状态
- Nginx配置示例(需根据你的实际部署路径调整正则规则):
# 匹配标准Apex应用URL格式,示例规则适配/ords/[应用标识]/[页面ID]/[会话ID]的标准格式 location ~ ^/ords/[^/]+/[0-9]+/[0-9]+(/.*)?$ { proxy_pass http://你的Apex后端服务地址; proxy_set_header Host $host; } # 所有不符合格式的ords相关请求直接返回404 location ~ ^/ords/ { return 404; }
方案2:Apex应用层自定义错误处理
- 适配场景:无权限修改前置服务器配置时,可直接在Apex内部实现逻辑
- 操作步骤:
- 进入对应Apex应用的共享组件 → 「应用定义属性」→ 「错误处理」页面
- 新建自定义错误处理函数,示例PL/SQL代码如下:
FUNCTION custom_error_handler (p_error IN apex_error.t_error) RETURN apex_error.t_error_result IS l_result apex_error.t_error_result; BEGIN l_result := apex_error.init_error_result(p_error => p_error); -- 匹配校验和错误的特征:错误码为-20001,报错信息包含checksum关键字 IF p_error.sqlcode = -20001 AND INSTR(LOWER(p_error.message), 'checksum') > 0 THEN -- 方式1:跳转至你提前创建的应用内404静态页面(页面号可自定义) owa_util.redirect_url(p_url => apex_page.get_url(p_page => 404), p_reset_htp => TRUE); -- 方式2:直接返回标准404状态码,不需要跳转页面可使用该配置 -- owa_util.status_line(nstatus => 404, creason => 'Not Found', bclose_header => TRUE); apex_application.stop_apex_engine; END IF; RETURN l_result; END custom_error_handler;
- 将错误处理函数配置保存后即可生效
注意事项
- 不要为了规避该问题关闭全局「会话状态保护」配置,否则会产生越权访问、参数篡改的安全风险
- 自定义404页面需要单独设置为公开访问权限,避免未登录用户访问时触发登录跳转逻辑
内容的提问来源于stack exchange,提问作者NoOneDer
相关产品推荐
相关产品推荐

