我试图在IIS中使用重写规则来路由这样的请求:
domain.com/users/some%20user%20name
到
domain.com/cms.asp?P=users/some user name
我看到的问题是规则是完全删除空格。这是我使用的规则:
<rule name="Rewrite Everything Else to cms.asp" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="cms.asp?p={R:1}" logRewrittenUrl="true" />
</rule>
在重写过程中导致空格被删除的原因是什么?如何防止空格?
答案 0 :(得分:1)
您不能在网址中包含空格。 http规范说明
必须转义URL中的空格和控制字符才能传输 在HTTP中,必须有其他不允许的字符。
如果您希望更具可读性,可能会将编码空格的规则重写为下划线或短划线。如果你有一定数量的空格,你可以用
之类的东西来捕捉它<rule name="Rewrite Everything Else to cms.asp" stopProcessing="true">
<match url="^(.*)%20(.*)%20(.*)%20(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="{R:1}-{R:2}-{R:3}-{R:4}" logRewrittenUrl="true" />
</rule>
然后重复输入:
^(.*)%20(.*)%20(.*) replaced by: {R:1}-{R:2}-{R:3}
^(.*)%20(.*) replaced by: {R:1}-{R:2}
将处理两个和一个空格。
如果您的空格数量未知,则可能需要实施IIS重写模块。