3

我在 asp.net 应用程序中使用 IIS url 重写模块,我的问题是任何内部相对引用,如 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>

完成此操作后,我的 URL(例如https://www.mydomain.com/index.aspx?mid=1)首先“重定向”到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 工作的另一件事我必须在母版页中获取基本 URL,目前它设置为“/”

于 2013-01-01T12:47:28.523 回答