ASP核心:使用AddIISUrlRewrite

时间:2017-03-18 02:05:35

标签: c# url-rewriting asp.net-core asp.net-core-mvc

我正在尝试为以下3个条件重新编写我的网址: 1.删​​除.php扩展名 2.删除.html扩展名 3.重定向所有" www"到非www

我试图使用ASP Core的Rewrite包并运行以下代码:

app.UseRewriter(new RewriteOptions().AddIISUrlRewrite(env.WebRootFileProvider, "files/IISUrlRewrite.xml"));

在files / IISUrlRewrite.xml上,我有这段代码:

<rewrite>
  <rules>
    <rule name="RemovePHP">
      <match url="^(.*).php$" />
      <action type="Rewrite" url="{R:1}" />
    </rule>
    <rule name="RemoveHTML">
      <match url="^(.*).html" />
      <action type="Rewrite" url="{R:1}" />
    </rule>
    <rule name="www to non-www" stopProcessing="true">
      <match url="(www.*)" negate="false"></match>
      <action type="Redirect" url="http://example.com/{R:1}"></action>
      <conditions>
        <add input="{HTTP_HOST}" pattern="^example\.com$" negate="true"></add>
      </conditions>
    </rule>
  </rules>
</rewrite>

但是,这不起作用。 www没有被重定向,.php没有被删除。当我把它放在我的web.config文件中时,此代码工作正常。

另外,我知道我可以使用中间件Microsoft Documentation: Url Rewriting

做同样的事情

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

在使用app.UseStaticFiles()方法配置静态文件处理后添加 RewriteMiddleware 时,通常会发生这种情况:如果这样做,重写中间件可能会被取代由负责静态文件的人,这可能搞乱你的重写规则。

换句话说,这样做:

app.UseDefaultFiles();

app.UseStaticFiles(new StaticFileOptions(...));

app.UseRewriter(new RewriteOptions(...)); // <- MIGHT NOT WORK AS EXPECTED

而这样做:

app.UseDefaultFiles();

app.UseRewriter(new RewriteOptions(...));  // <- WORKS

app.UseStaticFiles(new StaticFileOptions(...));