我正在使用其 Rewrite 模块从 IIS6 迁移到 IIS7。我有一个“漂亮”的 URL,如下所示:/Shop/Q%26A。当然,它是 Q&A 编码的。IIS7 似乎不喜欢它。有什么想法吗?
我已经设置了 doubleEscaping=true,因为我使用 '+' 而不是 '%20' 来表示空格。我似乎在网上找不到任何关于此的信息。
答案1
哇,正好IIS 团队的 Ruslan在过去的两天里一直在帮助我解决几乎相同的问题。
IIS(HTTP.sys)将为您解析您的 URL - 例如,http://site///////dir////文件为您提供与http://站点/目录/文件。它将保留查询字符串不变,但此时,由于我们使用的是漂亮的 URL,因此该值尚未在查询字符串中!
未编码的 URL 存储在名为 UNENCODED_URL 的服务器变量中。您可以执行如下操作将该值放入捕获变量中:
<rule name="something" stopProcessing="true">
<match url=".*" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{URL}" negate="true" pattern="^/index\.php" ignoreCase="false" />
<add input="{QUERY_STRING}" pattern="^$" ignoreCase="false" />
<add input="{UNENCODED_URL}" pattern="/(.*)" />
</conditions>
<action type="Rewrite" url="/index.php?title={C:1}" appendQueryString="true" />
</rule>
然后你用反向引用条件。