From: Wakou Aoyama Date: 2001-04-17T14:09:45+09:00 Subject: [ruby-list:29295] Re: [bug?] cgi.rb 青山です。 毎度ながら、リリース直前で申し訳ありません。 まず、このコードについてですが、Cookie を生成する場合に、path を指定し なかった場合、IE がおかしな挙動をする為に、とりあえず、無難そうな path を自動でつけてあげて、救済しようか、というコードです。 従って、本質的には、Cookie を生成する場合に、ちゃんと path を指定して 欲しい、という使用方法になり、この部分については、まあ、基本的には、保 証外という感じになります。 それを前提として、その救済策の内容についてですが、CGI.pm 2.752 では、 次のように、とてもシンプルになっています。 > $path ||= "/"; これはつまり、/ にしておけば、そのサイトにおいては、無条件に有効になり ますから、使えないよりはいいだろう、という方針だったとおもわれます。 そして、CGI.pm 3.01 では、次のようになっています。 > if ($path) > { > $path = "path=$path" > } > elsif (defined $ENV{'SCRIPT_NAME'}) > { > $path = join('',"path=",$ENV{'SCRIPT_NAME'} =~ m{^(.*/)}); > } SCRIPT_NAME がある場合には、それで救済しよう、という方針ですね。これは、 cgi.rb でも採用していますが、どうやら、このあたりが無難だったようです。 今回問題となっている、PATH_INFO ですが、これは、使用すべきでは無い、と いう記述がありました。 CGI.pm 3.01 より > NOTE: The Microsoft Internet Information Server > is broken with respect to additional path information. If > you use the Perl DLL library, the IIS server will attempt to > execute the additional path information as a Perl script. > If you use the ordinary file associations mapping, the > path information will be present in the environment, > but incorrect. The best thing to do is to avoid using additional > path information in CGI scripts destined for use with IIS. 従って、元々、無指定だった場合の救済策ですから、ここは、CGI.pm 3.01 の ように、無理に救済しようとせず、PATH_INFO からの path の判定そのものを 削除、という方向でいいようにおもえます。 -- 青山 和光 Wakou Aoyama