libapa...2::URI(3pm)
π libapa...2::URI β the Perl API for manipulating URIs
okay bestie, gather round π«Ά this is Apache2::URI, straight outta the User Contributed Perl Documentation, living in the libapa...2::URI(3pm) section. It's a Perl API for manipulating URIs and honestly? she's giving utility icon energy π
β¨ Synopsis β¨
use Apache2::URI ();
$hostport = $r->construct_server();
$hostport = $r->construct_server($hostname);
$hostport = $r->construct_server($hostname, $port);
$hostport = $r->construct_server($hostname, $port, $pool);
$url = $r->construct_url();
$url = $r->construct_url($rel_uri);
$url = $r->construct_url($rel_uri, $pool);
$parsed_uri = $r->parse_uri($uri);
$parsed_uri = $r->parsed_uri();
$url = join '%20', qw(one two three);
Apache2::URI::unescape_url($url);
πΈ Description πΈ
so here's the tea β APR::URI is the generic one β she'll dissect, adjust and put together any URI string you hand her, no questions asked. But Apache2::URI? She's the Apache-specific bestie π
she pulls the info straight out of the $r object instead. Which means when you're messing with the URI of the current HTTP request, you're usually using methods from both classes together. dynamic duo fr fr π¦
π API π
Apache2::URI comes with these functions and methods, no cap:
π construct_server
Builds a string out of the hostname and the port β¨
$hostport = $r->construct_server();
$hostport = $r->construct_server($hostname);
$hostport = $r->construct_server($hostname, $port);
$hostport = $r->construct_server($hostname, $port, $pool);
- obj:
$r(Apache2::RequestRec object) β the current request object, the main character of this whole thing π - opt arg1:
$hostname( string ) β the hostname of the server. If you don't hand it over,"$r->get_server_name"gets used instead πΈ - opt arg2:
$port( string ) β the port the server is running on. Don't pass it and she falls back to"$r->get_server_port"π« - opt arg3:
$pool(APR::Pool object) β the pool to allocate the string from. Skip it and"$r->pool"is your girl π«Ά - ret:
$hostport( string ) β the server's hostport string, slay β¨ - since:
2.0.00
Examples:
- Assuming that:
$r->get_server_name == "localhost";
$r->get_server_port == 8001;
The code:
$hostport = $r->construct_server();
returns a string:
localhost:8001
- The following code sets the values explicitly:
$hostport = $r->construct_server("my.example.com", 8888);
and it returns a string:
my.example.com:8888
π¦ construct_url
Builds a fully qualified URL from the uri plus all the info chillin' in the request rec π₯
$url = $r->construct_url();
$url = $r->construct_url($rel_uri);
$url = $r->construct_url($rel_uri, $pool);
- obj:
$r(Apache2::RequestRec object) β the current request object, periodt π - opt arg1:
$rel_uri( string ) β the path to the requested file (it may include a concatenation of path, query and fragment components). If you don't pass it,"$r->uri"is used π - opt arg2:
$pool(APR::Pool object) β the pool to allocate the URL from. No argument? Then it's"$r->pool"π - ret:
$url( string ) β a fully qualified URL β - since:
2.0.00
Examples:
- Assuming that the request was
http://localhost.localdomain:8529/test?args
The code:
my $url = $r->construct_url;
returns the string:
http://localhost.localdomain:8529/test
notice that the query (args) component is not in the string. You need to append it manually if it's needed π β she's not gonna do it for you, bestie.
- Assuming that the request was
http://localhost.localdomain:8529/test?args
The code:
my $rel_uri = "/foo/bar?tar";
my $url = $r->construct_url($rel_uri);
returns the string:
http://localhost.localdomain:8529/foo/bar?tar
π
parse_uri
Breaks apart a URI (and yes, that does affect the current request's uri components π)
$r->parse_uri($uri);
- obj:
$r(Apache2::RequestRec object) β the current request object π - arg1:
$uri( string ) β the uri to break apart π¨ - ret: no return value β she gives you nothing back, she just does things π
- warning: This method has several side-effects explained below
- since:
2.0.00
This method call has the following side-effects, and they are not subtle:
- sets
"$r->args"to the rest after'?'if such exists in the passed $uri, otherwise sets it to"undef". - sets
"$r->uri"to the passed $uri without the"$r->args"part. - sets
"$r->hostname"(if not set already) using the ("scheme://host:port") parts of the passed $uri.
okay so heads up π¨ this one edits the request while you watch. Side effects go crazy. Know what you're doing before you call her, fr fr.
π parsed_uri
Grabs the current request's parsed uri object π
my $uri = $r->parsed_uri();
- obj:
$r(Apache2::RequestRec object) β the current request object πΈ - ret:
$uri(APR::URI object) β the parsed uri β¨ - since:
2.0.00β and this object is suitable for using with"APR::URI::rpath"π«
π§ unescape_url
Unescapes URLs. That's it, that's the whole job π
Apache2::URI::unescape_url($url);
- obj:
$url( string ) β the URL to unescape π - ret: no return value β but the argument $url is now unescaped, so it did the thing in place, lowkey iconic β¨
- since:
2.0.00
Example:
my $url = join '%20', qw(one two three);
Apache2::URI::unescape_url($url);
$url now contains the string:
"one two three";
π See Also π
"APR::URI", and the mod_perl 2.0 documentation π (iykyk)
π Copyright π
mod_perl 2.0 and its core modules are copyrighted under The Apache Software License, Version 2.0. Legal girlies stay winning π
β Authors β
The mod_perl development team and numerous contributors. Legends, every single one π«Ά
and that's the whole page, bestie!! π this was perl v5.42.3, dated 2026-08-20, from the libapa...2::URI(3pm) manpage and honestly she ate and left no crumbs π
β¨ bye ily π¦
π¦ where this page comes from
- ubuntu stonking: libapache2-mod-perl2 2.0.13-2build3 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms