IIS 7.5 URL重写模块-使用变量重写映射
我在我的网站上有几个页面,它们有很长的、不可读的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”的值访问数据库中的信息,从而确定页面的内容。这些值可以更改,并且没有设置数量 现在,我已经使用以下重写规则使第一个示例运行良好: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=
<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}&other={R:2}" appendQueryString="true" />
</rule>
如果你找到了解决方案,就把它写下来作为答案,不要在问题中写下解决方案。我不能再回答我自己的问题7个小时了。