1

私のサイトには、短縮できるようにしたい、長くて読めない 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>
4

1 に答える 1

1

このルールを使用すると、書き換えマップの使用を完全に回避できました。私はもともとこのようなものを使用しようとしましたが、テスト環境のセットアップのために、いくつかの奇妙な調整なしでは機能しませんでした. このバージョンは、すべての通常の環境で動作するはずです。

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

編集:興味のある人のために機能する書き換えマップを備えた元のバージョンを入手することもできました。

<rule name="Rewrite Map with Variables" enabled="true">
    <match url="^(.+?)/?/(.*)$" />
    <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
        <add input="{ProductMap:{R:1}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="/dir1/dir2/filename.php?id={C:0}&amp;other={R:2}" appendQueryString="true" />
</rule>
于 2014-08-11T13:15:47.683 に答える