私はIISについて何も理解していませんが、すべての訪問者をdomain.com/pageからdomain.com/page.htmlにリダイレクトするというこの問題を解決しようとしています。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webServer>
<rewrite>
<rewriteMaps>
<rewriteMap name="StaticRedirects">
<add key="/page" value="/page.html" />
</rewriteMap>
</rewriteMaps>
</rewrite>
</system.webServer>
</configuration>
いくつかの問題が発生します。
1)既存のweb.config:書き換えマップを宣言していますが、それを使用するルールを作成していません。 RewriteMap自体はまったく何もしません。
2)以下は、それを行う方法です(書き換えマップを利用しません-ルールのみ、少量の書き換え/リダイレクトには適しています):
このルールは、SINGLE EXACT rewrite(internal redirect)/page
to /page.html
を実行します。ブラウザのURLは変更されません。
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRewrite" stopProcessing="true">
<match url="^page$" />
<action type="Rewrite" url="/page.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
このルール#2は上記と同じですが、ブラウザーでURLが変更される場所で301リダイレクト(永続的なリダイレクト)を行います。
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^page$" />
<action type="Redirect" url="/page.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
ルール#3は、拡張子が.htmlのファイルがある場合、任意のURLに対してそのような書き換えを実行しようとします(つまり、/page
の場合、/page.html
が存在するかどうかを確認し、存在する場合は書き換えが発生します):
<system.webServer>
<rewrite>
<rules>
<rule name="DynamicRewrite" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}\.html" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="/{R:1}.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
LazyOneの答えに欠けているものを1つ指摘したかっただけです(答えの下にコメントしただけですが、十分な担当者がいません)
永続リダイレクトのルール#2には、欠落しているものがあります。
redirectType="Permanent"
したがって、ルール#2は次のようになります。
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^page$" />
<action type="Redirect" url="/page.html" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
編集
URL書き換えモジュールの使用方法の詳細については、次の優れたドキュメントを参照してください。 RL書き換えモジュール構成リファレンス
コメントからの@kneidels質問への回答; URLを一致させるには、topic.php?id=39
次のようなものを使用できます。
<system.webServer>
<rewrite>
<rules>
<rule name="SpecificRedirect" stopProcessing="true">
<match url="^topic.php$" />
<conditions logicalGrouping="MatchAll">
<add input="{QUERY_STRING}" pattern="(?:id)=(\d{2})" />
</conditions>
<action type="Redirect" url="/newpage/{C:1}" appendQueryString="false" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
これはtopic.php?id=ab
に一致します。ここで、a
は0-9
の間の任意の数で、bは0-9
の間の任意の数です。その後、/newpage/xy
にリダイレクトされます。ここで、xy
は元のURLに由来します。私はこれをテストしていませんが、うまくいくはずです。
このルールを試してみましたが、GoDaddyホスティングでは、IIS 7アカウントごとにMicrosoft URL書き換えモジュールが既にインストールされているため、うまく機能しました。
<rewrite>
<rules>
<rule name="enquiry" stopProcessing="true">
<match url="^enquiry$" />
<action type="Rewrite" url="/Enquiry.aspx" />
</rule>
</rules>
</rewrite>