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

时间:2014-08-07 13:19:47

标签: iis arr

我正在尝试在反向代理重写发生后从我的应用程序(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

1 个答案:

答案 0 :(得分:2)

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

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

  1. 在IIS管理器中,导航到您的网站或应用程序文件夹。
  2. 打开网址重写功能。
  3. 在“操作”窗格中,单击“查看服务器变量...”,然后单击“添加...”
  4. 输入服务器变量的名称。
    • 如果要将其作为HTTP标头访问,请在其前面添加HTTP。例如,HTTP_X_MY_HEADER可以作为X-MY-HEADER标题访问。
  5. 然后,在重写规则中,将服务器变量值设置为{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,因此您可能需要根据自己的需要进行处理。