Index: [Article Count Order] [Thread]

Date: Wed, 28 Jan 2004 15:33:11 +0900
From: "Kawaji, Shinya" <kawaji@hoppeta.com>
Subject: [webrickja:104] ServerAlias
To: webrickja@notwork.org
Message-Id: <20040128153311FTWK%y@hoppeta.com>
X-Mail-Count: 00104

かわじ、です

Apache の ServerAlias のように、ServerName には完全に一致しなくても
同一の Virtual Host と見なせる機能があったらいいな、と思ったのですが、
いかがでしょうか?

以下の patch は簡便のために ServerAlias は String か Regexp ということに
していますので、Apache の場合とは違います(Array も使えない)。

vhost = WEBrick::HTTPServer.new({
  :ServerName  => 'example.com',
  :ServerAlias => /^(www\.)?example\.(com|net|org)$/,
  # ...
})


Index: lib/webrick/config.rb
===================================================================
RCS file: /src/ruby/lib/webrick/config.rb,v
retrieving revision 1.2
diff -u -r1.2 config.rb
--- lib/webrick/config.rb       8 Sep 2003 09:52:33 -0000       1.2
+++ lib/webrick/config.rb       28 Jan 2004 06:18:11 -0000
@@ -37,6 +37,7 @@

     # for HTTPServer, HTTPRequest, HTTPResponse ...
     HTTP = General.dup.update(
+      :ServerAlias    => nil,   # for Name-based Virtual Host.
       :Port           => 80,
       :RequestTimeout => 30,
       :HTTPVersion    => HTTPVersion.new("1.1"),
Index: lib/webrick/httpserver.rb
===================================================================
RCS file: /src/ruby/lib/webrick/httpserver.rb,v
retrieving revision 1.6
diff -u -r1.6 httpserver.rb
--- lib/webrick/httpserver.rb   24 Jan 2004 16:48:52 -0000      1.6
+++ lib/webrick/httpserver.rb   28 Jan 2004 06:18:11 -0000
@@ -133,7 +133,10 @@
       @virtual_hosts.find{|server|
         (server[:Port].nil?        || req.port == server[:Port])           &&
         (server[:BindAddress].nil? || req.addr[3] == server[:BindAddress]) &&
-        (server[:ServerName].nil?  || req.host == server[:ServerName])
+        (
+          (server[:ServerName].nil?  || req.host == server[:ServerName]) ||
+          (server[:ServerAlias].nil?  || server[:ServerAlias] === req.host)
+        )
       }
     end