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做同样的事情
感谢您的帮助。
这通常发生在您在使用该方法配置静态文件处理后添加RewriteMiddleware时app.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)