コントローラーを使用してサーバーの応答を処理するためにasp.netmvc3でrobots.txtファイルを設定するためのこの記事のアドバイスに従ってきましたが、IIS 8.0 Expressは、aspではなくファイルが見つからないというエラーを返します。ネットエラー。
このような場合にIISでファイルを検索しないようにするにはどうすればよいですか?web.configに必要なものはありますか?
コントローラーを使用してサーバーの応答を処理するためにasp.netmvc3でrobots.txtファイルを設定するためのこの記事のアドバイスに従ってきましたが、IIS 8.0 Expressは、aspではなくファイルが見つからないというエラーを返します。ネットエラー。
このような場合にIISでファイルを検索しないようにするにはどうすればよいですか?web.configに必要なものはありますか?
IISはここでインテリジェントにしようとします。StaticFile
彼はURLのドットをインターセプトし、これが静的ファイルであると考えて、デフォルトのハンドラーでそれを提供しようとします。管理対象のASP.NETアプリケーションにイベントが到達することはありません。
最初の可能性は、web.configに以下を追加することです。
<system.webserver>
<modules runAllManagedModulesForAllRequests="true" />
ただし、静的ファイル(.js、.css、画像など)へのすべてのリクエストは管理対象ファイルを通過するため、アプリケーションのパフォーマンスに悪影響を与える可能性があるため、実際にはこれを行うことをお勧めしません。パイプライン。
推奨されるアプローチは、次のハンドラーをweb.config
(<handlers>
のタグ<system.webServer>
)に追加することです。
<system.webServer>
<handlers>
<add name="Robots-ISAPI-Integrated-4.0" path="/robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
...
</handlers>
</system.webServer>
このハンドラーが特定のURLとHTTP動詞にのみ適用されるように指定したことに注意してください。
これで、GETすると/robots.txt
、IISはStaticFile
ハンドラーで処理しなくなり、代わりに管理対象パイプラインASP.NETに渡します。次に、ルーティングエンジンによってインターセプトされ、対応するコントローラーアクションにルーティングされます。
動的に生成されたrobots.txtファイルが必要な場合を除いて、これはほとんど必要ありませんが、次のようにしてください。
robots.txtへのルートを無視する
ルート.IgnoreRoute( "robots.txt");
robots.txtファイルをルートディレクトリに追加します