启用dynamicRouting后,IBM HTTP Server如何本地转发请求至指定HTML文件
解决方案
1. 优化Rewrite规则终止后续处理
将原规则的[PT,L]替换为[L,END](适用于Apache 2.4+版本,IBM HTTP Server基于此版本构建),确保重写操作完成后直接终止所有后续模块处理,避免请求被http_plugin转发至Liberty节点:
DocumentRoot /opt/IBM/HTTPServer/htdocs RewriteEngine On # CONDITION NR1 RewriteCond %{DOCUMENT_ROOT}/break/break_on.html -f RewriteCond %{DOCUMENT_ROOT}/break/break_on.enable -f RewriteCond %{SCRIPT_FILENAME} !break/break_on.html RewriteRule (.*) /break/break_on.html [L,END]
2. 排除本地资源的插件转发规则
若调整Rewrite规则后问题仍存在,需修改plugin-cfg.xml,强制让/break/break_on.html请求由IHS本地处理:
- 在
<UriGroup>节点中添加排除配置:
<UriGroup Name="default_host_URIs"> <!-- 保留原有URI规则 --> <Uri Name="/break/break_on.html" Ignore="true"/> </UriGroup>
- 或在IHS的
httpd.conf中添加强制本地处理的配置:
<Location "/break/break_on.html"> SetHandler none </Location>
3. 确保规则执行顺序正确
将Rewrite规则配置放在http_plugin加载语句(LoadModule was_ap24_module ...)之前,保证重写逻辑在插件捕获请求前优先执行。
问题根因
Liberty动态路由环境下,http_plugin会依据plugin-cfg.xml配置优先转发请求至后端Liberty节点。原规则中的[PT](Passthrough)标志会让重写后的URL继续被后续模块(包括插件)处理,导致本应指向IHS本地资源的请求仍被转发至Liberty,而该资源仅存在于IHS本地,因此返回404错误。
内容的提问来源于stack exchange,提问作者Hubert
相关产品推荐
相关产品推荐

