none
URLの途中で、起動したいアプリケーションを指定できるでしょうか RRS feed

  • 質問

  • IIS 8.5 のWebサイト直下にアプリケーション「myApp」を構成します。

    そしてWebブラウザで
     http://サイト名/myApp/folder1/folder2/target
    のように指定した時、

    1)APの「myApp」が動いて
    2)myAPP内部で、起動時に指定されたurl(=/myAppp/folder1/folder2/target)を取り込み
    3)指定されたパス(=urlから「myApp」を除いたもの。つまり/folder1/folder2/target)をたどって「target」を操作する

    というサイトを作成したいと思っています。

    このようなサイト、あるいはアプリケーションを構成することは可能でしょうか?

    アプリケーションでurlを取り込むのは、ASP.NETであればRequestオブジェクトの
     Request.RawUrl
    などで可能らしいので、上のようにURLの途中に記述されたアプリを
    動かせれば、目的通りのものができるのではと思っています。


    注)
    ちなみに、URLで指定したパスをたどって「target」を操作するだけなら、

     http://サイト名/myApp?param=/folder1/folder2/target

    という形式で可能であることは分かっていますが、今回は(ある理由で)採用しません。

    このフォーラムで、このような質問をして良いものかどうかと思いましたが、ご教示くだされば幸いです。


    以上

    2021年11月30日 7:14

すべての返信

  • いろいろ意味不明です。

    > IIS 8.5 のWebサイト直下にアプリケーション「myApp」を構成します。

    アプリケーションとは何ですか? ASP.NET Web Forms アプリ?

    > 3)指定されたパス(=urlから「myApp」を除いたもの。つまり/folder1/folder2/target)をたどって「target」を操作する

    「target」とは何ですか? 「操作する」とはどういうことですか? 

    たとえば「http://サイト名/myApp/folder1/folder2/target」という url をブラウザのアドレスバーに入力して要求した時、target ページが表示されればいいのですか?
    2021年11月30日 7:26
  • 質問文だけでは意図がよく分からない話ではありますが、クライアントからアクセスしてきた URL を元にして実際には別の URL にアクセスさせて応答させたいという話であれば、URLRewrite で良いのでは?


    Hebikuzure aka Murachi Akira

    2021年12月1日 1:18
  • 小生も勉強中のため、まったくトンチンカンなことを言ってるかもしれませんが・・・、

    ●URLの「/」で区切った文字列がWebサイト内のディレクトリ構造を示すのではなく、

    ●URLの「/」で区切った文字列そのものが、「param=」に代わる、パラメータの並びであって・・・、

    という仕組みをASP.NET Coreでは作れるようなのですが・・・、
    仰っていることに少し近いかな、と思いました。

    もしお望みのことと違っていたらごめんなさい。

    ここに記述がありますし、
    https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-6.0

    最初に小生がこの話題に接したのは、「パーフェクト C#」という書籍です。
    https://gihyo.jp/book/2021/978-4-297-12199-0

    2021年12月1日 4:57
  • > ●URLの「/」で区切った文字列がWebサイト内のディレクトリ構造を示すのではなく、

    > ●URLの「/」で区切った文字列そのものが、「param=」に代わる、パラメータの並びであって・・・、

    > という仕組みをASP.NET Coreでは作れるようなのですが・・・、

    それは ASP.NET Core より前からあった MVC アプリ用のルーティングの話でではないのですか?

    MVC5 ですとデフォルトでは、

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

    と定義されていて、ディレクトリ構造ではなくてコントローラーとそのアクションメソッドを指定して呼び出すようになっています。例えば要求 URL が /Member/Detail/5 の場合 Member という名前のコントローラーの中の Detail というアクションメソッドを呼び出し、5 というパラメータを渡すということになります。

    ユーザー独自の定義も追加できますが、その場合もコントローラー/アクションメソッド/パラメータという形になります。

    質問者さんが何を考えているか、聞いても無言なので不明ですが、多分こういう話(ルーティングの話)とは違うと想像しています。

    2021年12月1日 6:54
  • Hoshina です
    こんにちは

    私も、SurferOnWww さんと同じように感じています。
    例えば、ブラウザからの要求により、バッチ処理を起動したいというようなことなのかな~?と思いました。
    そうでなければ、普通に参考書を探せば見つかるように思います。

    質問者さんからの回答待ちのようですね。

    それでは
    2021年12月1日 8:21
  • お世話になります。

    不明瞭な質問で申し訳ありません。

    このサイトのコンテンツが、全・半角の英数記号を含むフォルダ、およびドキュメントになっています。
    それで、ユーザが全角・半角を間違えたurlをブラウザに指定するので、目的のドキュメントにアクセスできない
    ということが、しばしば起きています。例えば

    本物: http://..../フォルダー(1)/ドキュメント(a).doc
    間違い: http://..../フォルダー(1)/ドキュメント(a).doc

    当初、IISの「URL置き換え」で差分を吸収しようと思いましたが、
    フォルダやドキュメントの数が多いのと、間違え方も様々で不規則なため、
    完全な置き換えは難しいと思いました。

    なので、urlに指定されたパスが全・半角の間違いを含んでいるという前提で、
    アプリケーションで、全角・半角を区別しないで、フォルダ・ドキュメントを検索、発見して
    返すことができれば、アクセスできない場合が少なくなると考えた次第です。

    ただしユーザ側が認識しているURL、および現状のフォルダやファイルの名称は変えないで
    上記を実現したいので、その条件でどのようにしてアプリケーションを動かせばよいかを、
    お聞きしたかったです。

    なお、アプリケーションは、ASP.NETで作成することを想定しています。

    よろしくお願いします。

    以上

    2021年12月1日 8:25
  • 半角カタカナを使うのは止めていただきたいのですが。読みにくいです。

    > 当初、IISの「URL置き換え」で差分を吸収しようと思いましたが、

    前のスレッド ↓ の話ですよね、同じ課題でスレッドを乱立するのは止めてください。迷惑です。また、前のスレッドで回答をくれた方には失礼です。

    IISのWebサイトで、URLの全角・半角を区別しないようにしたい
    https://social.msdn.microsoft.com/Forums/ja-JP/e345be35-fba1-42b1-8e64-a9e540dcd319/iis12398web6540365394654121239112289url12398208403528212539213223?forum=winserver8



    • 編集済み SurferOnWww 2021年12月1日 9:02 追記
    2021年12月1日 8:56
  • Hoshinaです
    こんにちは

    実は、堀口さんのやりたいことが分かっているわけではありません。
    提案ということで読んでください。

    利用者にURLを直接入力してもらうことを無くすことはできないのでしょうか?
    URL に対応した文字列(URL そのものではなく)のリストを表示して、そこから希望する文字列を選択してもらうことにします。Web アプリでは、選択してもらった文字列を基に次の処理を進めるという方法です。こうすれば、表示内容と実際のURL との対応関係は、 Web アプリだけが知っていればよいことになります。

    それでは

    2021年12月2日 0:33
  • 種々、ご回答、ご指摘いただき、ありがとうございます。

    スレッドを分けた件は、失礼しました。今後気を付けます。

    本件ですが、先に、Hebikuzure aka Murachi Akira さんからご指摘のあった、
    URL置き換え機能で、下記の方向で試してみようと思います。

    -----
    http://サイト名/topfolder/(.*)

    http://サイト名/topfolder1/myApp?param={R:1}

    に置き換えて、myApp内でparamの内容で検索させる。
    -----

    # Hoshina さんのご指摘の「利用者に入力させない」というのは
     利用者から見て使い方は変更させたくないため、難しいです。


    以上

    2021年12月2日 1:53
  • Hoshina です
    こんにちは

    不勉強で知らなかったので、教えてください。

    この URL 書き換えの機能は、ブラウザから Web サーバ(IIS)に対するすべての要求の URL に適用されるんでしたでしょうか?

    今まで、拡張子が ASP.NET に該当するものだけに適用されると思っていました。
    堀口さんの例にあるような、拡張子が「.doc」には適応されないのでは?という疑問です。

    堀口さんの検証結果で教えていただければ、十分です。

    それでは
    2021年12月2日 8:15
  • URL Rewrite : The Official Microsoft IIS Site は ASP .NET の拡張ではなく IIS 自体の拡張機能なので、IIS でホストされるすべてのリソースに対して機能します。マッチ パターン、置き換えパターンともに正規表現が利用可能です。


    Hebikuzure aka Murachi Akira

    2021年12月2日 10:55
  • Hoshina です

    なるほど、知りませんでした。
    1つ賢くなりました。

    ありがとうございました
    2021年12月3日 0:56