我在Windows Server 2012上通过Web Components安装了IIS Rewrite 2.0模块。
我已经阅读了几篇文章,但我似乎无法让我的简单重写工作。
我想将http://www.acme.com/news/13/Jan/20
重写为http://www.acme.com/news.html#20-Jan-13
这是我正在使用的规则:
<rule name="news articles" stopProcessing="true">
<match url="^news\/(.*)\/(.*)\/(.*)$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="news.html#{R:3}-{R:2}-{R:1}" appendQueryString="false" />
</rule>
当我应用http://www.acme.com/news/13/Jan/20
作为我的测试模式时,重写可以正常工作。
但是,如果我浏览http://www.acme.com/news/13/Jan/20
,我会收到404错误:
Requested URL http://www.acme.com/news.html#20-Jan-13
Physical Path C:\Webs\acme.com\www\news.html#20-Jan-13
物理文件news.html存在,我可以直接浏览它。
是不是搞乱了?显然C:\ Webs \ acme.com \ www \ news.html#20-Jan-13不是物理文件,但我不知道如何解决这个问题。
我当然可以毫无问题地直接浏览http://www.acme.com/news.html#20-Jan-13。
有人可以帮忙吗?
非常感谢提前。
干杯, 标记
答案 0 :(得分:0)
根据这个“How do write a rewrite rule in IIS that allows HTML anchors?”答案,浏览器不会在URL请求中的#之后发送任何内容到服务器。它们是仅供浏览器滚动到结果页面的标记。
如果查看日志,您是否看到包含锚标记的页面的完整请求?
另一种方法可能是使用一些DOM加载的JS将页面滚动到URL中引用的锚点(需要jQuery):
$(function () {
var a_tag = $("a[name='" + window.location.hash.replace("#", "") +']");
$('html,body').animate({scrollTop: a_tag.offset().top}, 'slow');
});
虽然这可能无法解决友好网址的预期问题。