IIS 7.5 URL重写模块-使用变量重写映射

IIS 7.5 URL重写模块-使用变量重写映射,iis,url-rewriting,iis-7.5,url-rewrite-module,rewritemap,Iis,Url Rewriting,Iis 7.5,Url Rewrite Module,Rewritemap,我在我的网站上有几个页面,它们有很长的、不可读的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=

我在我的网站上有几个页面,它们有很长的、不可读的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包含变量的内容。我所看到的一切都使用了静态重写,就像我当前的解决方案使用的一样,我找不到任何关于允许任意参数的内容

编辑:

找到了一个不使用重写映射的更好的解决方案。我以前尝试过simliar规则,但由于测试环境中的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>

使用这个规则,我可以完全避免使用重写映射。最初我曾尝试使用类似的东西,但由于测试环境的设置,如果没有一些奇怪的调整,它将无法工作。此版本应适用于所有正常环境

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


如果你找到了解决方案,就把它写下来作为答案,不要在问题中写下解决方案。我不能再回答我自己的问题7个小时了。