【问题标题】:Application Request Routing: Get Original URL应用程序请求路由:获取原始 URL
【发布时间】:2014-09-30 18:18:45
【问题描述】:

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

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

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

有什么想法吗?

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

【问题讨论】:

    标签: iis arr


    【解决方案1】:

    这个答案的灵感来自 IIS 文档中的Setting HTTP request headers and IIS server variables。他们做了类似的事情,但奇怪的是它避免检测原始 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> 
    

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

    【讨论】:

      猜你喜欢
      • 2017-09-08
      • 2020-11-29
      • 2012-04-15
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多