我正在尝试为以下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
做同样的事情感谢您的帮助。
答案 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(...));