Apache mod_rewrite External Rewriting Program

Discussion in 'Ruby' started by Patrick Joyce, Nov 1, 2007.

  1. I needed to do a bit of complicated URL rewriting for a project I'm
    working on. Apache's mod_rewrite's built in capabilities wouldn't do, so
    I decided to make an External Rewriting Program
    (http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap) to do
    it.

    All the examples I could find were in Perl, but I wanted to take a stab
    at it in Ruby. What I have works most of the time, but occasionally
    fails with what appears to be a concurrency issue.

    Here is a simplified version of what I have:

    ---------------------
    #!/opt/csw/bin/ruby

    # Turn off buffering
    STDIN.sync = true
    STDOUT.sync = true

    # Enter loop
    while (STDIN)
    host = gets
    if host =~ /^(.+)\.somedomain\.com$/
    puts $1
    else
    puts 'NULL'
    end
    end
    ---------------------

    And here are the pertinent rewrite_log entries ("key" is what is passed
    to my program via STDIN, "val" is what my program returns to STDOUT):

    ---------------------
    [mysubdomain.somedomain.com/sid#81b3d48][rid#837ef38/initial] (5) map
    lookup OK: map=lookup_subdomain key=mysubdomain.somedomain.com ->
    val=msbomain
    [mysubdomain.somedomain.com/sid#81b3d48][rid#837ef38/initial] (5) map
    lookup OK: map=lookup_subdomain key=mysubdomain.somedomain.com ->
    val=yudmysubdomain
    ---------------------

    So... "mysubdomain.somedomain.com" is passed via STDIN to my program
    twice. The first time returns "msbomain" and the second returns
    "yudmysubdomain"

    Isn't this program single threaded? Any ideas as to how my output is
    being interleaved?

    I'm running ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-solaris2.8] on a
    Joyent Accelerator.

    Thanks is advance for your help.

    - Patrick Joyce
    --
    Posted via http://www.ruby-forum.com/.
     
    Patrick Joyce, Nov 1, 2007
    #1
    1. Advertising

  2. Patrick Joyce

    Guest

    OK, so I'm now actually pretty sure this isn't a problem with my Ruby
    code, but a problem with either Solaris or Apache.

    I went ahead and took the Perl example from the Apache docs, modified it
    slightly to match my example, and still got the same problem:
    intermittently interleaved results.

    This makes me pretty confident that the problem is outside of Ruby
    (unless of course, and I'm not ruling this out, I somehow made the same
    mistake in both Ruby and Perl).

    Since it doesn't seem to be a Ruby issue I don't expect any help here,
    but if anyone has ANY idea what could be going on I would be forever in
    your debt.

    - Patrick Joyce

    The Perl is below.

    -----------------
    #!/usr/bin/perl

    #disable buffered I/O which would lead
    #to deadloops for the Apache serve
    $| = 1;

    #read URLs one per line from stdin and
    #generate substitution URL on stdout
    while (<>) {
    /^(.+)\.somedomain\.com$/;
    print $1, "\n";
    }
    -----------------

    --
    Posted via http://www.ruby-forum.com/.
     
    , Nov 1, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Peter Morris [Droopy eyes software]

    Apache mod_rewrite

    Peter Morris [Droopy eyes software], Feb 19, 2005, in forum: ASP .Net
    Replies:
    1
    Views:
    405
    Tampa.NET Koder
    Feb 19, 2005
  2. Alex Martinoff
    Replies:
    2
    Views:
    4,209
    Alex Martinoff
    Sep 7, 2003
  3. Replies:
    1
    Views:
    392
    Jukka K. Korpela
    Aug 5, 2006
  4. Samuel

    Detecting mod_rewrite via CGI

    Samuel, Nov 29, 2007, in forum: Python
    Replies:
    0
    Views:
    264
    Samuel
    Nov 29, 2007
  5. Aaron Haspel

    perl script for apache mod_rewrite

    Aaron Haspel, Sep 8, 2006, in forum: Perl Misc
    Replies:
    11
    Views:
    297
    Aaron Haspel
    Sep 10, 2006
Loading...

Share This Page