私のサイトには、短縮できるようにしたい、長くて読めない URL を持つページがいくつかあります。私が抱えている問題は、クエリ文字列に変数値を追加することです。
例: 「www.example.com/dir1/dir2/filename.php」は「www.example.com/file」に短縮されます。「www.example.com/dir1/dir2/filename.php?id=2」は「www.example.com/file/2」になります。「www.example.com/dir1/dir2/filename.php?id=2&alt=6」は「www.example.com/file/2/6」になります。
「id」と「alt」の値は、ページのコンテンツを決定するデータベース内の情報にアクセスするためにページで使用されます。これらの値は変更される可能性があり、設定された量はありません。
現在、次の書き換えルールを使用して、最初の例が正常に機能しています。
<rewrite>
<outboundRules>
<remove name="OutboundRewriteUserFriendlyURL1" />
</outboundRules>
<rewriteMaps>
<rewriteMap name="StaticRewrites">
<add key="/file" value="/dir1/dir2/filename.php" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Rewrite Rule">
<match url=".*" />
<conditions>
<add input="{StaticRewrites:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{C:1}" />
</rule>
</rules>
</rewrite>
しかし、URL に変数を含めることを許可するものを見つけることができませんでした。私が見たものはすべて、現在のソリューションが使用しているように静的な書き換えを使用しており、任意のパラメーターを許可することについては何も見つかりません。
編集:
書き換えマップを使用しないより良い解決策を見つけました。以前に同様のルールを試みましたが、テスト環境での IIS セットアップが原因で、期待どおりに機能しませんでした。このバージョンは、ほとんどの人にとって機能するはずです。
<rule name="Curricula View" stopProcessing="true">
<match url="/file(?:/(\d+)(?:/(\d+))?)?" />
<action type="Rewrite" url="/dir1/dir2/filename.php?id={R:1}&alt={R:2}" appendQueryString="true" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
</rule>