我有一个需要在其有效负载中返回引用URI的模块。如果通过SSL连接调用,我需要构建一个具有https前缀的URI。我可以轻松地从请求中获取端口号,但问题是用户可能选择了SSL的任何端口(事实上,这个特定的Apache实例总是以非标准SSL端口开始)。
请求结构中所有已解析的URI已经删除了http / https前缀。我正在考虑使用r-> server-> defn_name字段,该字段实际上包含请求的虚拟服务器的conf文件。如果我看到以httpd-ssl.conf结尾,我猜这是一个SSL连接。仍然感觉像是一个黑客,实际上用户可以将conf文件命名为其他内容,这会破坏这种方法。
另一种方法是读取配置文件并找到SSL VirtualHost侦听端口,但我也无法完成此操作。
似乎我错过了一些非常简单的方法来判断请求是否是通过https进行的,但我已经扫描了request_rec中的所有可用结构,但我没有看到任何明显的结构。
答案 0 :(得分:3)
在httpd.h头文件中定义了一个很好的函数,它将为您提供请求的方案:
if (apr_strnatcmp(ap_http_scheme(r), "https") == 0) {
ssl = TRUE;
} else {
ssl = FALSE;
}