Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: How do I create friendlier URLS?

by rkrieger (Friar)
on Feb 22, 2007 at 13:20 UTC ( #601549=note: print w/ replies, xml ) Need Help??


in reply to How do I create friendlier URLS?

Granted, I'm suggesting something else than CGI::Application about which I know little. I do not know the scope or size of what you already have running, so YMMV.

You could look into HTML::Mason and its concept of dhandlers and autohandlers.

Using a dhandler, you can use the URLs of the form you indicated, while passing parameters with those URLs to a single script/component. For example: a URL of the form http://example.com/archives/753/pdf only requires a suitable dhandler in /archives/ that obtains the document with ID 753 and displays the PDF file stored for it.

Update: Added simple day-to-day example


Comment on Re: How do I create friendlier URLS?
Re^2: How do I create friendlier URLS?
by blogical (Pilgrim) on Feb 23, 2007 at 02:49 UTC

    I especially enjoy this aspect of Mason. Not the reason I'm using it, and I'm not sure the overhead would be worth it for just this feature, but it's worth a look.

    Mason does this by jumping in and handling certain URLs, then parsing them to try and find the best match for the request. No need to state parameters explicitly with a ? or reveal the handler's name in the URL. It can even be configured in a local .htaccess file if you're working with apache in an environment where you don't have access to the httpd.conf.

    Assuming apache, here's an example .htaccess:

    order allow,deny allow from all Options -Indexes -ExecCGI #Server root relevant path to handler script Action my-handler /test/my_handler.pl SetHandler my-handler AddHandler default-handler .html .gif .jpg .png <FilesMatch "my_handler.pl$"> Options +ExecCGI SetHandler cgi-script </FilesMatch>

    And an example my_handler.pl- not very useful as is, but dispatch with your new parameters as you like:

    #!/usr/bin/perl -wT use strict; print "Content-type: text/html\n\n"; print "<p>Request_URI contained: " . join( ' ', map {"[$_]"} split '/' +, $ENV{REQUEST_URI}) . "</p>\n"; print "$_ => $ENV{$_}<br />\n" for sort keys %ENV;

    Don't forget that the parameters will be encoded...

    "One is enough. If you are acquainted with the principle, what do you care for the myriad instances and applications?"
    - Henry David Thoreau, Walden

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://601549]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2014-09-22 21:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (203 votes), past polls