【问题标题】:IIS 7.5 URL Rewrite Module - Rewrite Maps with variablesIIS 7.5 URL 重写模块 - 用变量重写地图
【发布时间】:2014-09-30 23:44:18
【问题描述】:

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

编辑:

找到了一个不使用 Rewrite Map 的更好解决方案。我之前曾尝试过类似的规则,但由于我们测试环境中的 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>

【问题讨论】:

  • 如果您找到了解决方案,请将其写为答案,不要在问题中写出解决方案。
  • 我还有 7 个小时无法回答自己的问题。

标签: iis url-rewriting iis-7.5 url-rewrite-module rewritemap


【解决方案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>

【讨论】:

    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 2012-05-23
    • 2013-01-06
    • 1970-01-01
    • 2013-07-26
    • 2011-12-04
    • 2012-06-01
    • 2015-05-11
    相关资源
    最近更新 更多