From: Patrick Joyce Date: 2007-11-01T13:49:48+09:00 Subject: Apache mod_rewrite External Rewriting Program 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/.