我正在尝试在反向代理重写发生后从我的应用程序(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,因此您可能需要根据需要处理.