IIS url重写,破坏href(css,js等)

时间:2012-12-21 13:02:49

标签: asp.net .net url-rewriting iis-7.5

我在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和images的引用现在也指向“ pk / files / js / jquery.js“在我的应用程序中它应该是”files / js / jquery.js“,请帮我解决这个问题。

1 个答案:

答案 0 :(得分: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首先“重定向”到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,这正是我想要的。

内部网址的工作还有一点我必须在母版页中使用基本网址,目前它已设置为“/”