トップ回答者
[ASP.NET3.5] 独自ドメインでのResponse.Redirectの相対アドレスの指定

質問
-
毎度、お世話になります。
今まで、ASP.NETをIISサーバに登録して、IPアドレス指定で動かしていました。
(例:http://192.168.123.456/abc/index.aspx)
今回、独自ドメインを取得して192.168.123.456/abc/までをドメイン名に設定しました。
(例:http://newdom.jp/index.aspx)
すると、Response.Redirectでページを変える部分で、404エラーになり、
要求されたURLに/abc/abc/xxx.aspxと表示され、ブラウザのアドレスも
http://newdom.jp/abc/xxx.aspxとなって何故か/abc/が付いています。
ドメイン設定をしている管理者からは、ASP.NET側の問題と言われています。
Response.Redirect("./xxx.aspx", true);
Response.Redirect("~/xxx.aspx", true);
Response.Redirect("xxx.aspx", true);
の何れも結果は同じです。
原因が分かりません。どなたか御教授お願いします。
回答
-
> 例が悪かったようですね。
例もよくないですが、とにかく説明が不足です。どのように説明したら
問題が理解されるかをよく考えた上で質問していただければと思います。依然として詳しい状況が分からないのでハズレかもしれませんが・・・
> 独自ドメインを取得して192.168.123.456/abc/までをドメイン名に設定
とは、IIS 側が http://newdom.jp/index.aspx でクライアントから要求
を受けたら、IIS 内部では http://newdom.jp/abc/index.aspx を取得し
て応答するように IIS を設定 (URL Rewrite?) したということですか?ところが、Response.Redirect("~/xxx.aspx") で HTTP 302 の Location
は以前と同じ http://newdom.jp/abc/xxx.aspx となり、それを受けたブ
ラウザはその通り要求する。だから、IIS 側で abc がダブってしまい、
ページが見つからないというエラーになるということですか?だとすると、それは IIS の設定がまずかったということで、ASP.NET で対
処すべき問題ではないと思います。ダブっていたら 1 つ削除するなどの
対症療法的なことは出来るかもしれませんが、予期せぬ副作用がありそ
うでお勧めできません。> /abc/は、フォルダではなくIISに登録しているアプリケーションのエ
> イリアス名です。
> 現在は、仕方が無いのでIISのdefault web siteの物理フォルダにアプ
> リのフォルダを設定しています。この意味も理解できていませんが、Web アプリもどこかの物理フォルダ
にあるはずですよね? それを、仮想ディレクトリ/アプリケーションで
はなく、Web サイトに設定するだけで目的は果たせるのでは? それな
ら IIS の設定で簡単に対応可能です。そんな単純な話ではなくて、
> IIS配下のフォルダ /abc/ とかを見せたくないのでしょう。
の「見せたくない」ということが本来の理由だとすると、サイト全体の
構成と、それに適した URL 名づけルールをよ~く考えて決めて、URL
Rewrite という手段を用いるということになると思います。- 編集済み SurferOnWww 2010年10月1日 13:29 誤記訂正
- 回答としてマーク マリカ 2010年10月4日 1:14
すべての返信
-
> 今回、独自ドメインを取得して192.168.123.456/abc/までをドメイン名に設定しました。
> (例:http://newdom.jp/index.aspx)192.168.xxx.xxx というとプライベートアドレスのようですけど、社内の LAN 内からの
みアクセスする Web サーバーの IP アドレスとドメイン名を、社内の DNS サーバーに
登録したのですか?それにしても、「192.168.123.456/abc/までをドメイン名に設定」ということは聞いた
ことがありません(無知な自分が知らないだけかもしれませんけど)。普通、ドメイン名 newdom.jp に IP アドレス 192.168.123.456 を割り当てて DNS に登
録ということになると思うのですが・・・そのように (newdom.jp = 192.168.123.456) できませんか? そうすれば、たぶん問
題は解決するのではないかと思います。 -
> 192.168.123.456/abc/までをドメイン名に設定
ドメインとしてフォルダを含んだ設定とかできないと思うので、そのドメインにアクセスがきたときに特定のフォルダ以下をみせるようにIIS側で設定したんでしょうね。それならできるかと。ちがうのかな?
で、そんな変更するならそもそもabcフォルダが存在しないかのようにIIS側の設定をもうちょっと工夫したほうがよかったんじゃないかと思いますが。DNSの管理者とIISの管理者とが異なるなら、そのあたりで十分に話しあってみるとよいかと。
あおい情報システム株式会社 小野修司(どっとねっとふぁん) -
> 例が悪かったようですね。
例もよくないですが、とにかく説明が不足です。どのように説明したら
問題が理解されるかをよく考えた上で質問していただければと思います。依然として詳しい状況が分からないのでハズレかもしれませんが・・・
> 独自ドメインを取得して192.168.123.456/abc/までをドメイン名に設定
とは、IIS 側が http://newdom.jp/index.aspx でクライアントから要求
を受けたら、IIS 内部では http://newdom.jp/abc/index.aspx を取得し
て応答するように IIS を設定 (URL Rewrite?) したということですか?ところが、Response.Redirect("~/xxx.aspx") で HTTP 302 の Location
は以前と同じ http://newdom.jp/abc/xxx.aspx となり、それを受けたブ
ラウザはその通り要求する。だから、IIS 側で abc がダブってしまい、
ページが見つからないというエラーになるということですか?だとすると、それは IIS の設定がまずかったということで、ASP.NET で対
処すべき問題ではないと思います。ダブっていたら 1 つ削除するなどの
対症療法的なことは出来るかもしれませんが、予期せぬ副作用がありそ
うでお勧めできません。> /abc/は、フォルダではなくIISに登録しているアプリケーションのエ
> イリアス名です。
> 現在は、仕方が無いのでIISのdefault web siteの物理フォルダにアプ
> リのフォルダを設定しています。この意味も理解できていませんが、Web アプリもどこかの物理フォルダ
にあるはずですよね? それを、仮想ディレクトリ/アプリケーションで
はなく、Web サイトに設定するだけで目的は果たせるのでは? それな
ら IIS の設定で簡単に対応可能です。そんな単純な話ではなくて、
> IIS配下のフォルダ /abc/ とかを見せたくないのでしょう。
の「見せたくない」ということが本来の理由だとすると、サイト全体の
構成と、それに適した URL 名づけルールをよ~く考えて決めて、URL
Rewrite という手段を用いるということになると思います。- 編集済み SurferOnWww 2010年10月1日 13:29 誤記訂正
- 回答としてマーク マリカ 2010年10月4日 1:14