3

私はasp.netアプリケーションでIISurl書き換えモジュールを使用しています。私の問題は、js、css、画像などの内部相対参照が、このurl書き換え後に間違ったURLを指していることです。以下は、私の書き換えルールです。

<rewrite>
      <rules>
         <rule name="pk" patternSyntax="ECMAScript">
          <match url="pk/([a-z]+).aspx" />
          <action type="Rewrite" url="{R:1}.aspx?mid=1" />
          <conditions logicalGrouping="MatchAny">
            <add input="{REQUEST_FILENAME}" pattern="(\.css|\.js)$" negate="true" />
          </conditions>
        </rule>
      </rules>
</rewrite>

上記の書き直しでは、「pk / page_name.aspx」を含むURLはpage_name.aspx?mid = 1に変換されますが、これは正常に機能していますが、マスターページのjs、css、および画像への参照も「pk/files」を指しているようになりました/js/jquery.js」ですが、私のアプリケーションでは「files / js /jquery.js」である必要があります。この問題の解決にご協力ください。

4

1 に答える 1

2

私は自分でこの問題を解決することができます。以前は完全に間違っていました。問題を引き起こしている書き換えだけを行っていました。最初にページを目的のURLに「リダイレクト」し、次にそのURLを「書き換え」ることで解決しました。私のアプリケーションが理解するものに。以下は私の構成です

<rewrite>
      <rules>
        <rule name="Redriect for Markets" stopProcessing="true">
          <match url="([a-z]+)\.aspx" />
          <action type="Redirect" url="/{id:{C:1}}/{R:1}.aspx" appendQueryString="false" />
          <conditions>
            <add input="{REQUEST_FILENAME}" pattern="(\.css|\.js|\.jpg|\.png|\.woff|\.tiff|\.gif|\.dev|\.swf)$" negate="true" />
            <add input="{QUERY_STRING}" pattern="mid=(.+)" />
          </conditions>
        </rule>
        <rule name="Rewrite for Markets" stopProcessing="true">
          <match url="([a-z][a-z])/(.*)" />
          <action type="Rewrite" url="{R:2}?mid={marketId:{R:1}}" />
          <conditions logicalGrouping="MatchAny">
              <add input="{REQUEST_FILENAME}" pattern="(\.css|\.js|\.jpg|\.png|\.woff|\.tiff|\.gif|\.dev|\.swf)$" negate="true" />
          </conditions>
        </rule>
      </rules>
      <rewriteMaps>
        <rewriteMap name="id">
          <add key="1" value="pk" />
        </rewriteMap>
        <rewriteMap name="marketId">
          <add key="pk" value="1" />

        </rewriteMap>
      </rewriteMaps>

    </rewrite>

これを行った後、https://www.mydomain.com/index.aspx?mid = 1のような私のURLは、最初にhttps://www.mydomain.com/pk/index.aspxに「リダイレクト」され、次に「書き換えられます」 "をhttps://www.mydomain.com/index.aspx?mid=1に内部的に送信します。したがって、ブラウザウィンドウにはURLがhttps://www.mydomain.com/pk/index.aspxと表示され、Request.QueryString ["mid"]で取得する値は1です。これは、まさに私が望んでいたものです。

内部URLが機能するためのもう1つのことは、マスターページのベースURLを取得する必要があり、現在は「/」に設定されています

于 2013-01-01T12:47:28.523 に答える