iis - 重写为带有主题标签的 URL

标签 iis url-rewriting

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

<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>

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

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

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

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

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

最佳答案

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

关于iis - 重写为带有主题标签的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15441903/

相关文章:

c# - URL重写+输出缓存

url-rewriting - URL 中的破折号与下划线

c# - asp.net网站配置,页面不写日志

asp.net-mvc - ASP.NET Core 中资源的相对 URL 从开发到生产都不起作用

iis-7 - 防止 IIS 7 URL 重写模块匹配/ScriptResource.axd

nginx - 子域的复杂Nginx重写规则

visual-studio - Web Deploy 3.0 发布时出现令人恼火的 401 错误

iis - 成功加载到内存后,创建对象突然开始失败

asp.net - Firefox 在 IIS6 上启用摘要式身份验证的每个 HTTP 请求上都要求输入用户名/密码

.htaccess - htaccess - 允许多个域来源、强制 https、强制 www、使用子目录重写 url