かわじ、です。
> > 以下の 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