Index: [Article Count Order] [Thread]

Date: Wed, 28 Jan 2004 18:59:58 +0900
From: "Kawaji, Shinya" <kawaji@hoppeta.com>
Subject: [webrickja:109] Re: ServerAlias
To: webrickja@notwork.org
Message-Id: <20040128185958ZAZ#mQ@hoppeta.com>
In-Reply-To: <20040128.180721.607957648.gotoyuzo@sawara.does.notwork.org>
References: <20040128.180721.607957648.gotoyuzo@sawara.does.notwork.org>
X-Mail-Count: 00109

かわじ、です。


> > 以下の patch は簡便のために ServerAlias は String か Regexp というこ
> > とにしていますので、Apache の場合とは違います(Array も使えない)。
> 
> かならずArrayということでいいんじゃないでしょうか。
> 
>  (server[:ServerAlias].nil? || server[:ServerAlias].find{|h| h === req.host })
> 
> とか。StringもEnumerableなので偶然動きますけど。

あ、そういうやり方がありましたね。そこまで考えが至りませんでした。
いい感じですね。


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 09:58:52 -0000
@@ -37,6 +37,7 @@

     # for HTTPServer, HTTPRequest, HTTPResponse ...
     HTTP = General.dup.update(
+      :ServerAlias    => [],    # 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 09:58:52 -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].find{|h| h === req.host })
+        )
       }
     end