3

我正在使用 IIS URL 重写模块通过重写映射和重写规则(而不是重定向)用友好的 URL 掩盖我的内部 URL。这是我的重写地图:

<rewriteMap name="HashTest">
     <add key="/nohash" value="/nohash.aspx" />
     <add key="/hash1" value="/hashtest.aspx#hash1" />
</rewriteMap>

这是我的重写规则:

<rule name="Rewrite rule1 for HashTest">
       <match url=".*" />
       <conditions>
           <add input="{HashTest:{REQUEST_URI}}" pattern="(.+)" />
       </conditions>
       <action type="Rewrite" url="{C:1}" />
</rule>

这适用于没有主题标签的 URL,因此每次我查询www.mysite.com/nohash时,它都会向我显示来自www.mysite.com/nohash.aspx的内容,并在浏览器上更改 URL。

现在,当我尝试重写包含主题标签的 URL 时,我得到一个 404 错误,例如www.mysite.com/hash1应该只显示来自/hashtest.aspx#hash1的内容,但我只得到一个 404。

现在,如果我将规则操作类型更改为Redirect,它确实会成功重定向,所以我不知道为什么它不适用于 rewrite。

我知道主题标签不会在请求时发送到服务器,但如果我的重写映射是向后的,那将是有意义的,比如<add key="/hashtest.aspx#hash1" value="/hash1" />.

关于为什么重定向适用于hastags但重写不适用的任何见解?我没有与 IIS 重定向结婚,如果您有其他模块或方法,我可以使用它,非常欢迎

4

1 回答 1

8

井号后面的部分(正式称为片段标识符)是 URL 的客户端唯一部分。它永远不会发送到服务器。这就是为什么它不适用于重写,而仅适用于重定向。重写规则将匹配,但 IIS 实际上会尝试打开一个名为的文件hashtest.aspx#hash1(即扩展名为 的文件.asp#hash1)。由于扩展未链接到 ASP.NET,因此该文件不会作为普通 ASP 页处理。而且很可能它的内容甚至根本不会显示,因为 IIS 默认配置为仅允许对已知扩展的请求。

于 2013-03-15T22:32:09.497 回答