Apache2-SSI
view release on metacpan or search on metacpan
lib/Apache2/SSI/URI.pm view on Meta::CPAN
<!--#include virtual="../other.html" -->
An L<Apache2::SSI::URI> object would be instantiated to process the uri C<../other.html>, flatten the dots and get its underlying filename.
Even if the uri provided does not exist, am L<Apache2::SSI::URI> object would still be returned, so you need to check if the file exists by doing:
if( $uri->code == 404 )
{
die( "Not there\n" );
}
Or, this would work too:
if( $uri->finfo->filetype == Apache2::SSI::Finfo::FILETYPE_NOFILE )
{
die( "No such file !\n" );
}
=head1 METHODS
=head2 new
This instantiate an object that is used to access other key methods. It takes the following parameters:
=over 4
=item C<apache_request>
This is the L<Apache2::RequestRec> object that is provided if running under mod_perl.
it can be retrieved from L<Apache2::RequestUtil/request> or via L<Apache2::Filter/r>
You can get this L<Apache2::RequestRec> object by requiring L<Apache2::RequestUtil> and calling its class method L<Apache2::RequestUtil/request> such as C<Apache2::RequestUtil->request> and assuming you have set C<PerlOptions +GlobalRequest> in your ...
Note that there is a main request object and subprocess request object, so to find out which one you are dealing with, use L<Apache2::RequestUtil/is_initial_req>, such as:
use Apache2::RequestUtil (); # extends Apache2::RequestRec objects
my $r = $r->is_initial_req ? $r : $r->main;
=item C<base_uri>
This is the base uri which is used to make uri absolute.
For example, if the main document uri is C</some/folder/file.html> containing a directive:
<!--#include virtual="../other.html" -->
One would instantiate an object using C</some/folder/file.html> as the base_uri like this:
my $uri = Apache2::SSI::URI->new(
base_uri => '/some/folder/file.html',
apache_request => $r,
document_uri => '../other.html',
# No need to specify document_root, because it will be derived from
# the Apache2::RequestRec provided with the apache_request parameter.
);
=item C<document_root>
This is only necessary to be provided if this is not running under Apache mod_perl. Without this value, L<Apache2::SSI> has no way to guess the document root and will not be able to function properly and will return an L</error>.
=item C<document_uri>
This is only necessary to be provided if this is not running under Apache mod_perl. This must be the uri of the document being served, such as C</my/path/index.html>. So, if you are using this outside of the rim of Apache mod_perl and your file resid...
=back
=head2 apache_request
Sets or gets the L<Apache2::RequestRec> object. As explained in the L</new> method, you can get this Apache object by requiring the package L<Apache2::RequestUtil> and calling L<Apache2::RequestUtil/request> such as C<Apache2::RequestUtil->request> a...
When running under Apache mod_perl this is set automatically from the special L</handler> method, such as:
my $r = $f->r; # $f is the Apache2::Filter object provided by Apache
=for Pod::Coverage base_dir
=head2 base_uri
Sets or gets the base reference uri. This is used to render the L</document_uri> provided an absolute uri.
=head2 clone
Create a clone of the object and return it.
=head2 code
Sets or gets the http code for this uri.
$uri->code( 404 );
=head2 collapse_dots
Provided with an uri, and this will resolve the path and removing the dots, such as C<.> and C<..> and return an L<URI> object.
This is done as per the L<RFC 3986 section 5.2.4 algorithm|https://tools.ietf.org/html/rfc3986#page-33>
my $uri = $ssi->collapse_dots( '/../a/b/../c/./d.html' );
# would become /a/c/d.html
my $uri = $ssi->collapse_dots( '/../a/b/../c/./d.html?foo=../bar' );
# would become /a/c/d.html?foo=../bar
$uri->query # foo=../bar
=for Pod::Coverage document_dir
=head2 document_directory
Returns an L<Apache2::SSI::URI> object of the current directory of the L</document_uri> provided.
This can also be called as C<$uri->document_dir>
=head2 document_filename
This is an alias for L<Apache2::SSI::URI/filename>
=head2 document_path
Sets or gets the uri path to the document. This is the same as L</document_uri>, except it is striped from L</query_string> and L</path_info>.
=head2 document_root
( run in 0.818 second using v1.01-cache-2.11-cpan-39bf76dae61 )