0

URL からサブフォルダーを取得し、それをクエリ文字列値に変換するルールを作成しようとしています。

この URL に移動した場合http://www.example.com/myfolder :http://www.example.com/default.aspx?folder=myfolder

これは私がやっていることです:

<rule name="Rewrite Language">
  <match url="([a-z]{2})(.*)" />
  <conditions logicalGrouping="MatchAll">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Rewrite" url="/default.aspx?code={R:2}" />
</rule>

ただし、これは完全なサブフォルダーの値を返しません。正直に言うと、これはこのサイトの同様の問題から盗んだものであり、それが何を意味するのか本当にわからないことを告白しなければなりません!

これは間違った方法でアプローチしている可能性があります。私の問題は、ランダムな 6 文字の英数字の値から動的に生成されるため、サブフォルダーがどうなるかわからないことです。

どんな助けでも大歓迎です。

デビッド

4

1 に答える 1

2

IISマネージャーには、ルールを作成するためのGUI /ウィザードインターフェイスがあります。通常、ルールをweb.configファイルに手動で入力するよりもすばやく簡単に見つけることができます。チェックアウトする価値があります:IIS Manager -> select your site / application -> URL Rewrite -> Add Rule(s)

私は次のルールがあなたのためにトリックをするだろうと思います:

<rule name="RewriteUserFriendlyURL1" stopProcessing="true">
    <match url="^([^/]+)/?$" />
    <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="default.aspx?folder={R:1}" />
</rule>

基本的に、「一致URL」は、URLの一部を識別するために使用される正規表現です。この場合、URLの末尾にオプションの/を付けて、1つ以上の文字(/を除く)を含むグループをキャプチャします。次に、URLを書き換えて、default.aspx?folder=一致した値を続けます({R:1}最初にキャプチャされたグループを参照します。これにはフォルダ名が含まれます)。

これは、サブフォルダー名が1つしかない場合(ネストされたフォルダーではない場合)に機能します。

反対方向に機能する2番目のルールを追加することもできます。そのため、を参照するhttp://www.example.com/default.aspx?folder=myfolderと、ユーザーには次のように表示されhttp://www.example.com/myfolderます。

<rule name="RedirectUserFriendlyURL1" stopProcessing="true">
    <match url="^default\.aspx$" />
    <conditions>
        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
        <add input="{QUERY_STRING}" pattern="^folder=([^=&amp;]+)$" />
    </conditions>
    <action type="Redirect" url="{C:1}" appendQueryString="false" />
</rule>
于 2013-01-16T21:20:04.210 に答える