全局修改MVC 4/5中的左侧部分URL

时间:2015-01-08 12:27:54

标签: asp.net-mvc iis routing

我正在使用带有MVC4和MVC5的IIS 8.5。

让我们假设我有两个网站,其中第一个(WS1)的网址是: http://myapp.example.com

和第二个网站(WS2)的URL是: http://myapp.example.com/sub (并且位于我要转发的另一个港口)

现在,我的问题是MVC生成的所有URL(链接等)都将使用URL的左侧部分并删除该应用程序中的/ sub。假设在WS2中我想将用户重定向到http://myapp.example.com/sub/login,但它会变为http://myapp.example.com/login

我已经尝试过IIS URL重写,但它只能处理实际包含/ sub部分的第一次请求,MVC生成的URL当然会在没有/ sub部分的情况下错误地保留。

<rewrite>
  <rules>
    <rule name="Rewrite">
      <match url="^Sub/(.*)" />
      <action type="Rewrite" url="http://myapp.example.com/{R:1}" />
    </rule>
  </rules>
  <outboundRules>
    <rule name="Response Status Update" preCondition="ResponseStatus" stopProcessing="true">
      <match serverVariable="RESPONSE_Location" pattern="^/(.*)" />
      <action type="Rewrite" value="/Sub/{R:1}" />
    </rule>
    <rule name="RewriteRelativePaths" preCondition="IsHTML">
      <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" negate="false" />
      <conditions>
        <add input="{URL}" pattern="^/Sub/.*" />
      </conditions>
      <action type="Rewrite" value="/Sub/{R:1}" />
    </rule>
    <preConditions>
      <preCondition name="IsHTML">
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
      </preCondition>
      <preCondition name="ResponseStatus">
        <add input="{RESPONSE_STATUS}" pattern="3[0-9][0-9]" />
      </preCondition>
    </preConditions>
  </outboundRules>
</rewrite>

我的问题是我如何才能做到这一点。使用其他子域不是一种选择。

0 个答案:

没有答案