iis – 应用程序请求路由:获取原始URL

我正在尝试在反向代理重写发生后从我的应用程序(MVC 5)中获取原始URL.

我已经尝试了所有可以找到的东西,例如

>将我自己的服务器变量设置为{HTTP_HOST}的值(我的服务器变量以HTTP开头).这包含当前URL或null.
>使用不包含主机名的HTTP_X_ORIGINAL_URL服务器变量.
>查看所有内置服务器变量.
>设置值preserveHostHeaders,如下所示:https://stackoverflow.com/a/7180527/4950,这导致站点挂起

有任何想法吗?

尝试使用ARR 3.0和Url Rewrite 2.0在IIS7和IIS7.5上进行尝试

最佳答案 这个答案的灵感来自IIS文档中的
Setting HTTP request headers and IIS server variables.他们做了类似的事情,但奇怪的是它避免检测原始URL是用HTTP还是HTTPS访问的.

首先,您需要具有对IIS服务器的管理访问权限,才能在URL Rewrite模块中设置新的允许服务器变量.链接文章对此进行了描述,但以下是基本步骤:

>在IIS管理器中,导航到您的网站或应用程序文件夹.
>打开URL重写功能.
>在“操作”窗格中,单击“查看服务器变量…”,然后单击“添加…”
>输入服务器变量的名称.

>如果要将其作为HTTP标头访问,请使用HTTP作为前缀.例如,HTTP_X_MY_HEADER可作为X-MY-HEADER标头访问.

然后,在重写规则中,将服务器变量值设置为{CACHE_URL}.您可以通过UI或直接在web.config中执行此操作,如下所示.

注意:请务必根据需要设置匹配,条件和操作.

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="original URL sample" stopProcessing="true">
          ...
          <serverVariables>
            <set name="HTTP_X_MY_HEADER" value="{CACHE_URL}" />
          </serverVariables> 
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration> 

生成的标题将明确包含端口号,例如http://foo.example:80 / bar,因此您可能需要根据需要处理.

点赞