かわじ、です
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