2017-03-18 9 views
2

私は条件以下の3のための再書き込み私のURLにしようとしています使用しているときに動作していない書き換え: 1.削除.PHP拡張子を 2.削除.htmlの拡張子 3.リダイレクトすべて「WWW」非WWWASPコア:URLはAddIISUrlRewrite

に私はASPコアの書き換えパッケージを使用して、次のコードを実行しようとしていた。

<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> 
:ファイル/ IISUrlRewrite.xml上

app.UseRewriter(new RewriteOptions().AddIISUrlRewrite(env.WebRootFileProvider, "files/IISUrlRewrite.xml")); 

を、私はこのコードを持っています

ただし、これは機能しません。 wwwはリダイレクトされません.phpは削除されていません。このコードは、web.configファイルに入れてもうまく動作します。

はまた、私は

Microsoft Documentation: Url Rewritingが助けてくれてありがとうミドルウェアを使用して同じことを行うことができます理解しています。あなたがapp.UseStaticFiles()メソッドを使用して処理する静的ファイルを設定した後RewriteMiddlewareを追加するとき

+0

ですか? – CPR43

+0

返信いただきありがとうございます、それも動作していません。 – FerX32

+0

あなたのプロジェクト構造では、たぶん 'ファイル/ IISUrlRewrite'ですか?これがプロジェクトのルートにある場合、 'env.ContentRootFileProvider'を使う必要があります。' env.WebRootFileProvider'を使うと '$/wwwroot/files/IISUrlRewrite'にあることを意味します。 'fileProvider.GetFileInfo(filePath);を手動でチェックすることで、それらのファイルプロバイダのいずれかに見つかったファイルを再確認することもできます。 –

答えて

1

これは通常起こります:あなたはそれを行う場合は、RewriteMiddlewareは混乱可能性、静的ファイルの担当のいずれかによってsuperseededされる可能性があります書き換えルールをアップしてください。

app.UseDefaultFiles(); 

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

app.UseRewriter(new RewriteOptions(...)); // <- MIGHT NOT WORK AS EXPECTED 

を、代わりに次の操作を行います:つまり

は、これをしない、あなたの第二のルールは、作業すなわち.htmlのページのリダイレクト

app.UseDefaultFiles(); 

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

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