リクエストされたURLを元にhttp://example/path/to/file といった、スキーム、ホスト名、ポート番号、URIという完全なURLを作る方法。
答えはhttp_core.cに
配布や複数のホストで運用する前提のモジュールの場合、URIやホスト名をハードコーディングしては後々大変。リクエストに使われたホスト名やポート番号でURLを動的に整形すればその問題は回避できる。URLを作成するために必要な
- スキーム(http,https,ftp etc..)
- ホスト名
- ポート番号
- URI
- ap_http_method()
- ap_get_server_name()
- ap_get_server_port()
- r->unparsed_uri
char *url = ap_construct_url(r->pool, r->unparsed_uri, r);これだけ。80/tcpや443/tcpなどデフォルトのポート番号の場合は省略もしてくれるので楽チン。mod_sslを組み込んでEAPIを有効にした場合はスキームの取得方法が少々変わって
((char *)ap_ctx_get((r)->ctx, "ap::http::method")) : "http")になる。