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

Rob*_*ett 5 iis arr

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

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

  • 将我自己的服务器变量设置为 {HTTP_HOST} 的值(我的服务器变量以 HTTP 开头)。这要么包含当前 URL,要么包含空值。
  • 使用不包含主机名的 HTTP_X_ORIGINAL_URL 服务器变量。
  • 查看所有内置的服务器变量。
  • 在这里详细设置值 preserveHostHeaders:https : //stackoverflow.com/a/7180527/4950,这导致网站挂起

有任何想法吗?

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

Hol*_*per 2

这个答案的灵感来自于 IIS 文档中的设置 HTTP 请求标头和 IIS 服务器变量。他们做了类似的事情,但奇怪的是,它避免检测原始 URL 是通过 HTTP 还是 HTTPS 访问的。

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

  1. 在 IIS 管理器中,导航到您的网站或应用程序文件夹。
  2. 打开 URL 重写功能。
  3. 在“操作”窗格中,单击“查看服务器变量...”,然后单击“添加...”
  4. 输入服务器变量的名称。
    • 如果您想将其作为 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> 
Run Code Online (Sandbox Code Playgroud)

生成的标头将显式包含端口号,例如http://foo.example:80/bar,因此您可能需要根据您的需要进行处理。