使用.Net Core在Windows 2016(IIS 10)上重写URL以指向CDN

时间:2017-03-16 16:05:52

标签: asp.net-core asp.net-core-mvc url-rewrite-module iis-10

我有一台运行Windows 2016(IIS 10)的全新虚拟服务器。我有一个使用.NET Core 1.1构建的网站。

我想重写所有image,js,font和css引用以指向CDN。

问题1 ,添加此规则:

<rule name="CDN Assets" stopProcessing="true">
    <match url="^css/(.+)$|^images/(.+)$|^fonts/(.+)$|^js/(.+)$" ignoreCase="true" />
    <action type="Rewrite" url="https://cdn.example.net/{R:0}" appendQueryString="true" />
</rule>

...每个请求都会产生404。例如,对https://example.net/images/en-us/logo.png的请求,即使该图像同时存在于https://cdn.example.net/images/en-us/logo.png下面的真实文件夹中

这可能是由.NET Core或HTTP2(在IIS 10中引入)引起的。或者我还需要某种出境规则吗?

问题2 ,添加以下出站规则:

<rule name="Outbound CDN: images" preCondition="IsHtml">
    <match filterByTags="A, Img, Link" pattern="^/images/(.+)$" />
    <action type="Rewrite" value="//cdn.example.net{R:0}" />
</rule>
<preConditions>
    <preCondition name="IsHtml">
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html"/>
    </preCondition>
</preConditions>

导致页面响应变为完全损坏的不可读垃圾。这是因为响应是通过HTTPS发送的吗?

更新(2016/03/16 8:01 PM MST)

使用@EricB建议我尝试通过Microsoft.ASPNetCore.Rewrite包实现它无济于事。

我在 Startup.cs 中有这个,只是加载了本地图像:

string CDNroot = Configuration["URLs:CDN"].Trim();
RewriteOptions rewriteOptions = new RewriteOptions()
    .AddRewrite(@"^(css|images|fonts|js)(.+)$", CDNroot + "/$1$2", skipRemainingRules: true);
app.UseRewriter(rewriteOptions);

如果我将其更改为:

string CDNroot = Configuration["URLs:CDN"].Trim();
RewriteOptions rewriteOptions = new RewriteOptions()
    .AddRedirect(@"^(css|images|fonts|js)(.+)$", CDNroot + "/$1$2");
app.UseRewriter(rewriteOptions);

...并请求图片网址重定向到CDN网址。但是您不希望重定向,因为这会为每个资产请求添加额外的30倍响应。我很难理解为什么Redirect有效,但Rewrite没有。

0 个答案:

没有答案