Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
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?
Replies are listed 'Best First'.
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 rifling through the Monastery: (13)
As of 2015-07-31 21:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (282 votes), past polls