Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP核心:使用AddIISUrlRewrite时URL重写不起作用_C#_Url Rewriting_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

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

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> &

我正在尝试为以下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>
  <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页面重定向有效吗?谢谢你的回复,不,这也不起作用。你的项目结构中的什么地方是exacly
files/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(...));