C# ASP核心:使用AddIISUrlRewrite时URL重写不起作用
我正在尝试为以下3种情况重新编写URL: 1.php扩展名 2.Remove.html扩展名 3.将所有“www”重定向到非www 我试图使用ASP Core的重写包并运行以下代码:C# ASP核心:使用AddIISUrlRewrite时URL重写不起作用,c#,url-rewriting,asp.net-core,asp.net-core-mvc,C#,Url Rewriting,Asp.net Core,Asp.net Core Mvc,我正在尝试为以下3种情况重新编写URL: 1.php扩展名 2.Remove.html扩展名 3.将所有“www”重定向到非www 我试图使用ASP Core的重写包并运行以下代码: app.UseRewriter(new RewriteOptions().AddIISUrlRewrite(env.WebRootFileProvider, "files/IISUrlRewrite.xml")); 在/iissurewrite.xml文件中,我有以下代码: <rewrite> &
app.UseRewriter(new RewriteOptions().AddIISUrlRewrite(env.WebRootFileProvider, "files/IISUrlRewrite.xml"));
在/iissurewrite.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>
感谢您的帮助。在使用app.UseStaticFiles()
方法配置静态文件处理后添加重写中间件时,通常会发生这种情况:如果这样做,则负责静态文件的人可能会取代重写中间件,这可能会打乱你的重写规则
换句话说,不要这样做:
app.UseDefaultFiles();
app.UseStaticFiles(新的StaticFileOptions(…);
app.UseRewriter(新的重写选项(…);//你的第二条规则ie.html页面重定向有效吗?谢谢你的回复,不,这也不起作用。你的项目结构中的什么地方是exaclyfiles/iisurelrewrite
?如果它位于项目根目录中,则需要使用env.ContentRootFileProvider
,使用env.WebRootFileProvider
意味着它将位于$/wwwroot/files/iissurewrite
中。您还可以通过手动检查fileProvider.GetFileInfo(filePath)来再次检查这些文件提供程序中的任何一个是否找到该文件代码>是的,它在/wwwroot/files/iisurerwrite中。在开始时,它并没有抛出一个file not found异常,所以我很确定它能够正确地定位火。
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(...));