IIS7 URL 重写和符号

IIS7 URL 重写和符号

我正在使用其 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>

然后你用反向引用条件

相关内容