【问题标题】:IIS Rewrite 2.0 Module - 404 errorsIIS 重写 2.0 模块 - 404 错误
【发布时间】:2013-04-21 12:42:42
【问题描述】:

我已经在我的 Windows Server 2012 上通过 Web 组件安装了 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

有人可以帮忙吗?

非常感谢。

干杯, 标记

【问题讨论】:

  • 确定不是文件/文件夹的权限问题?
  • 感谢 d_ethier。不,Web 根目录中的所有文件,包括 news.html,都可以由浏览器加载。我的网站已经上线几个月了;我刚刚决定创建友好的 URL。我所有的其他重写规则都在起作用——只是这个不是。

标签: url-rewrite-module


【解决方案1】:

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

不过,这可能无法解决更友好 URL 的预期问题。

【讨论】:

  • 感谢 d_ethier 的努力,但这不是我想要的,但它可能必须这样做:) 是的,日志显示 Web 服务器试图加载文件 news.html# dd-mmm-yy (当然不存在)。因此,经过大量搜索后,我得出结论,无法重写页面锚点(但您可以重定向 - 这不允许“友好”网址保持原位)。所以我认为我必须使用传统参数(例如 news.html?d=dd&m=mm&y=yy)和一些 jQuery(如您建议)将参数转换为页面锚点和滚动来解决我的问题给它。
猜你喜欢
  • 2011-07-01
  • 2018-05-04
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2012-06-01
  • 1970-01-01
相关资源
最近更新 更多