- PR -

階層化したディレクトリ構成を隠蔽する方法は?

1
投稿者投稿内容
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2003-07-10 15:38
初めて投稿します。宜しくお願いします。

ASP.NETをWin 2000 proで開発してWin 2003 Serverでテストする環境で作業しています。

 作成しているWebアプリケーションのイメージはhttp://mydomain.com/wapp/main.aspx/へブラウザからアクセスすると入力フォームが現れ、「次へ」を押すと次の入力フォームが現れるといった感じの繰り返しです。

 サーバ上の現在のファイル構成として一つの入力フォームが一つの.aspxファイルに対応していて、../wapp/ディレクトリ内に全て(30個くらい)の.aspxファイルと/bin/.dllファイルが有るのですが、この構成だとどのファイルがどの入力フォームに対応しているのか分らり難いので、各ASP.NETファイルを階層ディレクトリ構造に分けて管理したいと思っています。こんな感じです。

/inetpub/wwwroot/wapp/・・・main.aspx
              |-/subDir1/・・・sub1.aspx
              |-/subDir2/・・・sub2.aspx
              |-/subDir3/・・・sub3.aspx
                 |--/subDir3-1/・・・sub3-1.aspx

しかし、サブディレクトリの階層構造をユーザーに見せたくないので、ブラウザのURLにはwappメインディレクトリしか表示させたくありません。つまり、

 http://mydomain.com/wapp/main.aspx 

へアクセスして次の入力フォームへ遷移するときに

 http://mydomain.com/wapp/subDir1/sub1.aspx

とは見せずに

 http://mydomain.com/wapp/sub1.aspx

という風に見せたいのですが、なにか良い方法はないでしょうか?

 IISの仮想ディレクトリのプロパティで「URLのリダイレクト」をいじってみたり、ここの過去ログやMSのIISのヘルプなどを調べてみたのですが、そういった情報を見つけることができませんでした。もしかしてフレームとか使わないとできない気がしてきました。どうなんでしょうか?
 長々とすいませんでした。宜しくお願いしいます
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-07-10 16:42
Server.Transferを使うと、URLは変わらずに、処理を別のaspxに投げられます。

(個人的には、素直に見せてしまった方がいいと思いますが。)
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2003-07-10 21:09
catsさん、ご返答ありがとうございます。



Server.Transferを検証をやってみましたところ上手く動きました。こんな感じに書きました。

[main.aspx内]
Server.Transfer("sub1.aspx");
 
 しかし、Server.TransferはURLの履歴を更新しないでフォームを移動させて(マニュアルによると欠点として書かれていますが)くれますが、「同じディレクトリ内の.aspxファイル」限定でした。なのでTransfer先が別のディレクトリもしくはサブディレクトリ内の.aspxファイルだと適用できませんでした。
 只、HttpServerUtility.Transferをオーバーロードすれば「別のURL」、つまり「別のディレクトリ」へも移動できるようです。しかし、この場合ユーザーのブラウザが履歴を更新してしまうので結局ディレクトリ階層が丸見えになってしまいます。
 
 どうやら、なにかもっと裏技的なことしなければ実現できなさそうです。もうちょっと調べてみたいと思います。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-07-10 21:56
もしかしたら、HttpHandlerとか使えるかも。
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2003-07-10 21:59
自己レスです。

 ちょっと勘違いしてました。あとServerはHttpServerUtilityのインスタンスでした。おかしな事書いてすいません。

 HttpServerUtility.Transferのオーバーロード版を使うことで上手くいきました。以下のコードを書きました。

[main.aspx内]
Server.Transfer("/wapp/subDir1/sub1.aspx/", true);

これだと

 http://〜/wapp/main.aspx/

から/subDir1/sub1.aspx/へTransferしてもURLは

 http://〜/wapp/subDir1/sub1.aspx/

とはならずに

  http://〜/wapp/main.aspx/

と表示されたままページ移動できます。ブラウザの履歴も確認しましたが更新されていませんでした。しかし、MSDNライブラリでTransferを調べたところ、上でも書きましたが「ブラウザの履歴が更新される」と書いてあるのに何故か履歴が更新されませんでした。結果的に良かったんですが、もやもや感が残ります。
 もしどなたか何か知っていたら教えていただけないでしょうか?また、このやり方だとURLに

 http://〜/wapp/subDir1/sub1.aspx/

と打ち込んでしまうと表示されてしまうことが分りました。完璧には隠蔽できないものなんでしょうか?引き続き調べて見たいと思います。
ryuuji
ベテラン
会議室デビュー日: 2003/07/10
投稿数: 53
お住まい・勤務地: 東京都
投稿日時: 2003-07-10 22:01
catsさん、ありがとうございます。

HttpHandler調べてみます。
1

スキルアップ/キャリアアップ(JOB@IT)