ASP 核心:使用 AddIISUrlRewrite 时 URL 重写不起作用

Fer*_*X32 4 c# url-rewriting asp.net-core-mvc asp.net-core

我正在尝试为以下 3 个条件重写我的 URL:1. 删除 .php 扩展名 2. 删除 .html 扩展名 3. 将所有“www”重定向到非 www

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

app.UseRewriter(new RewriteOptions().AddIISUrlRewrite(env.WebRootFileProvider, "files/IISUrlRewrite.xml"));
Run Code Online (Sandbox Code Playgroud)

在文件/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>
Run Code Online (Sandbox Code Playgroud)

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

另外,我知道我可以使用中间件Microsoft 文档:Url Rewriting做同样的事情

感谢您的帮助。

Dar*_*eal 9

这通常发生在您在使用该方法配置静态文件处理后添加RewriteMiddlewareapp.UseStaticFiles():如果这样做,RewriteMiddleware可能会被负责静态文件的人取代,这可能会扰乱您的重写规则。

换句话说,要这样做:

app.UseDefaultFiles();

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

app.UseRewriter(new RewriteOptions(...)); // <- MIGHT NOT WORK AS EXPECTED
Run Code Online (Sandbox Code Playgroud)

而是这样做:

app.UseDefaultFiles();

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

app.UseStaticFiles(new StaticFileOptions(...));
Run Code Online (Sandbox Code Playgroud)