将静态内容重写到 IIS 中的不同域

Posted

技术标签:

【中文标题】将静态内容重写到 IIS 中的不同域【英文标题】:Rewrite static content to different domain in IIS 【发布时间】:2015-04-10 04:38:10 【问题描述】:

我在 ASP.NET 上有一个本地网站。而且我需要将一些静态内容(从文件夹“static”)代理到另一个网站。

我添加了这条规则:

<rule name="All in static folder" stopProcessing="true">
    <match url="^static/.*" />
    <action type="Rewrite" url="http://otherwebsite.com/R:0" appendQueryString="true" logRewrittenUrl="true" />
</rule>

但这不起作用 - 基于失败的请求日志,我的路由匹配(PATTERN_MATCH 步骤匹配“true”,然后我在 REWRITE_ACTION 和 RULE_EVALUATION_END 中看到正确的 url)但我看到 ASP.NET 之后继续评估其他模块这等试图自己提供内容,点击静态文件处理程序并获得 404(因为磁盘上没有这样的文件)。

我确实可以访问重写的文件(http://otherwebSite.com/static/stylesheet.css 之类的文件在浏览器中打开没有任何问题)。还写一些其他别名(在 etc/hosts 中)并打开 http://otherwebSiteLocalAlias.com/static/stylesheet.css 也可以(意味着该网站没有一些主机/代理验证机制)。

将操作更改为“redirect”也可以,但在我的情况下这是不可接受的。

我有另一条规则,将 非静态资源(文件夹 URL,如 /mypage/)代理到同一主机并且它可以工作。它只是不适用于静态文件 - 似乎在 url 重写完成后它的工作正常,请求继续由 asp.net 处理,这不应该是这种情况。

【问题讨论】:

你明白了吗? 【参考方案1】:

为应用程序请求路由安装 ARR 3.0 和“启用代理”以允许 &lt;action type="Rewrite" .. /&gt; 重写到不同的域。

以下是如何安装 ARR 3.0 并使用巧克力和 powershell 启用代理。

# download chocolatey
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
choco feature enable -n allowGlobalConfirmation

# install web platform installer cli
choco install webpicommandline -y

#install ARR 3.0
WebpiCmd /Install /Products:"ARRv3_0" /AcceptEULA

# enable proxy on root IIS web server
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST'  -filter "system.webServer/proxy" -name "enabled" -value "True"

【讨论】:

当然我已经安装了这个,否则在 web.config 中添加“规则”部分是没有意义的。关键是它在被代理模块重写后并没有停止请求管道。 我在没有 ARR 代理的情况下所经历的是对同一域的“重写”规则,即:&lt;action type="Rewrite" url="/changethepath/R:0" ... /&gt; 工作正常,但必须启用 ARR 代理才能启用对单独域的重写,即:在操作 URL 中包括 http://domain。我的下一步是设置两个简单的 IIS 站点(siteA 和 siteB),其中只有一个 index.html,并创建一个类似 &lt;match url=".*" /&gt;&lt;action type="Rewrite" url="http://siteB/" appendQueryString="true" logRewrittenUrl="true" /&gt; 的规则来查看它是否有效。 我已经安装并启用了它。它起作用了(赶上规则并执行重写),只是它继续将请求向下处理到管道并最终以静态文件处理程序结束。

以上是关于将静态内容重写到 IIS 中的不同域的主要内容,如果未能解决你的问题,请参考以下文章

windows2008(64位)下iis7.5中的url伪静态化重写(urlrewrite)

在 Windows Server 2019 上以域用户身份运行时,IIS 站点不会显示静态内容

IIS 将 MVC 中的静态文件理解为动态内容

对于静态域文件,仍然附加 cookie。怎么解决? ASP.NET , IIS 10

C#/IIS/MVC:静态内容未在不同环境中加载

IIS重写2.0 IIS伪静态 下载地址