IIS 2.0重写模块 - 404错误

问题描述:

我已经安装通过Web组件的IIS重写2.0模块我在Windows Server 2012上IIS 2.0重写模块 - 404错误

我读过几篇文章,但我似乎无法让我的简单的重写上班。

我想重写http://www.acme.com/news/13/Jan/20http://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

你确定它不是文件/文件夹的权限问题吗? – 2013-04-21 14:24:55

+0

谢谢d_ethier。不可以,浏览器可以加载web根目录下的所有文件,包括news.html。我的网站已经有好几个月了,我只是决定创建友好的网址。我所有其他的重写规则都在起作用 - 只是这一个不是。 – Mark 2013-04-21 22:52:24

根据这个“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'); 
}); 

虽然这可能没有解决的友好预期问题网址。

+0

感谢d_ethier的努力,但这不是我所期望的,但它可能需要做的:)是的,日志显示Web服务器试图加载文件news.html#dd-mmm-yy(它当然不存在)。所以经过大量搜索后,我得出结论:不能重写页面锚点(但是可以重定向 - 这不允许“友好”的url保持原位)。所以我想我必须使用传统的参数(例如news.html?d = dd&m = mm&y = yy)来解决我的问题,然后使用一些jQuery(如您所建议的)将参数转换为页面上的锚点并滚动到它。 – Mark 2013-04-22 01:08:14