url重写后如何知道原始url?

Nic*_*hac 6 asp.net-mvc iis-7 url-rewriting

我有url重写规则,将www.domain2.com重定向到domain1.com根目录下的子文件夹(让我们称之为此文件夹子项目).在我的控制器中,我需要构建一个原始未修改路径的URL,但Request.Url属性(如AbsoluteUri或LocalPath)始终包含子项目子文件夹.

换句话说,如果用户键入:

www.domain2.com/controller/action
Run Code Online (Sandbox Code Playgroud)

urlrewrite使它成为:

www.domain1.com/subproject/controller/action
Run Code Online (Sandbox Code Playgroud)

我希望重建原始网址:

www.domain2.com/controller/action
Run Code Online (Sandbox Code Playgroud)

我可以硬编码从url中删除子项目并使用domain2开始url但是我需要一个通用的代码段,因为这个url重建将在一个可重用的库中.domain2可以在我的应用程序的设置中,但该子文件夹呢?

在参考中,这是重写规则:

<rewrite>
    <rules>
        <rule name="Redirect to subproject">
            <match url=".*" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="^(www.)?domain2.com" />
                <add input="{PATH_INFO}" pattern="^/subproject/" negate="true" />
            </conditions>
            <action type="Rewrite" url="\subproject\{R:0}" />
        </rule>
    </rules>
</rewrite>
Run Code Online (Sandbox Code Playgroud)

谢谢

Kla*_*sen 23

您应该能够在Request.RawUrl中找到它.

  • @CrazyDart,经过一些谷歌搜索,似乎HTTP_X_REWRITE_URL是非标准的(我在本地尝试,它返回空字符串).使用Reflector,我看到RawUrl查看CACHE_URL服务器变量(本地它运行良好并包含原始域,但它不在Params中).使用这个是否安全? (3认同)