IIS UrlRewrite 不适用于 IIS 8

Posted

技术标签:

【中文标题】IIS UrlRewrite 不适用于 IIS 8【英文标题】:IIS UrlRewrite is not working for IIS 8 【发布时间】:2013-01-14 11:14:57 【问题描述】:

我刚刚将我的网站从具有 IIS 7.5 的一台使用 IIS 8 的新计算机移到了。除了 URL 重写之外,所有的都运行良好。没有比我得到的"HTTP Error 404.0 - Not Found" 更多的错误消息。我只认识到,在网站>模块设置页面中有一个类似RewriteModule (%SystemRoot%\system32\inetsrv\rewrite.dll) 的条目,但是,IIS 8 没有相同的模块。即使我在 IIS 8 中添加了相同的模块,它也没有用。如果我能对如何解决问题提出一些建议,我会很高兴。可根据要求提供更多信息..

希望我能正确表达我的意思。!

提前致谢,

阿尔珀

ps:url 规则运行良好..

【问题讨论】:

【参考方案1】:

你可以试试这个方法。谷歌搜索一下,你不是唯一一个遇到这个问题的人 --> http://forums.iis.net/t/1173537.aspx/1

【讨论】:

首先感谢您的尝试,但看起来这是一个不同的问题。我确定两台机器中都存在 C:\Windows\System32\inetsrv\rewrite.dll。但是在 IIS 8 的模块中没有添加该模块,但是尽管我一次又一次地添加和测试,但它没有工作。从中午开始,我一直在寻找解决方案,现在已经是午夜了。再次感谢..【参考方案2】:

我找不到导致问题的原因,但我今天刚刚通过重新安装 windows 服务器和 IIS 8 解决了它。

感谢您的关注和宝贵的时间,

阿尔珀

【讨论】:

【参考方案3】:

在 Windows Service 2008 到 Windows Service 2012 更新后,我遇到了类似的问题,虽然我还没有完全测试过,但我所做的只是专门卸载/重新安装重写模块。

希望这对遇到同样问题的人有所帮助。

【讨论】:

【参考方案4】:

首先你必须检查rewrite url是否正常工作,按照这个示例教程:

http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules

如果没有,请打开 IIS8 并检查是否显示 URL 重写图标。如果没有从这里下载 msi:

http://www.iis.net/downloads/microsoft/url-rewrite

并重新安装模块。现在您可以在根节点(服务器节点)以及网站和 Web 应用程序节点上的 IIS 管理器中看到 URL 重写模块。

希望对你有帮助!

【讨论】:

你安装了 URL Rewrite 2.0 吗? 对我来说,URL-REWRITE 模块必须双安装,尽管在 IIS 中 HTTP-Redirect 的图标是可见的。显然,重定向和重写不要混淆【参考方案5】:

我也有这个问题。 正如 OP 所注意到的,.dll 未注册。安装程序说一切都很好,重写图标在 IIS 管理器中,但它不起作用。检查 .dll 是否存在(参见下面的路径)。使用微软记事本,真的,我不是在开玩笑,它必须是微软记事本,甚至Visual Studio都无法使用。以管理员身份启动记事本并打开 C:\Windows\System32\inetsrv\Config\applicationHost.config

将以下行添加到<globalModules> 节点。

<add name="RewriteModule" image="%SystemRoot%\system32\inetsrv\rewrite.dll" />

保存,现在试试你的规则。

确实必须是记事本,如果您尝试在 64 位系统上使用其他任何东西编辑 applicationHost.config,您将需要花费数小时的时间。我见过的最奇怪的窗户异常之一。 http://weblog.west-wind.com/posts/2008/Aug/09/Editing-Applicationhostconfig-on-64-bit-Win2008 http://dpotter.net/technical/2009/11/editing-applicationhostconfig-on-64-bit-windows/

【讨论】:

不一定是记事本,可以是任何64位的编辑软件。我使用 Notepad++ 64 位(32 位会让你流泪,哈哈)【参考方案6】:

对我来说,我的 URL 重写在 IIS7.5 中有效,但在 IIS8 中无效

问题在于模式

在 IIS7.5 中,我将模式写为 off

在 IIS8 中,我必须将其更新为 ^OFF$

【讨论】:

为什么,可以参考一下链接吗?【参考方案7】:

它有助于检查和修复重写规则。我知道它早先有效,但我不知道要更改它。

【讨论】:

【参考方案8】:

我忘记为要重定向的域添加绑定。 例如。重定向到https://www.example.com 通常需要以下绑定:

https://www.example.com https://example.com http://www.example.com http://example.com

这些重定向规则 (from SO) 然后对我有用:

<rule name="Redirect from non www" stopProcessing="true">
    <match url=".*" />
    <conditions>
      <add input="HTTP_HOST" pattern="^example.com$" />
    </conditions>
    <action type="Redirect" url="https://www.example.com/R:0" redirectType="Permanent" />
  </rule>
  <rule name="Redirect from non https" stopProcessing="true">
    <match url=".*" />
    <conditions>
      <add input="HTTPS" pattern="^OFF$" />
      <add input="HTTP_HOST" pattern="^www.example.com$" />
    </conditions>
    <action type="Redirect" url="https://www.example.com/R:0" redirectType="Permanent" />
  </rule>

【讨论】:

这里也一样。好收获【参考方案9】:

打开 IIS 管理器 > 服务器 > 模块 > 配置本机模块 在列表中,选择 RewriteModule 并单击 OK

IIS Config

这对我有用。

【讨论】:

【参考方案10】:

同时检查:确保此设置为false,否则在 URL 重写重写 URL 后,.NET 应用程序可能会将其重新路由回去。

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">

【讨论】:

【参考方案11】:

我花了几个小时来解决这个问题。我经历了一些步骤并让重写模块正常工作。

    重新安装重写模块。如果您在 IIS 中没有看到此模块,并且 已安装的应用程序列表但重写安装程序说 thar is is 已经安装到注册表 (HKLM/SOFTWARE/MICROSOFT/WINDOWS/CURRENTVERSION/Uninstall) 和 搜索“重写”。找到卸载字符串并运行它。它将删除 重写模块,您可以从头开始安装。 为 IIS 安装应用程序请求路由模块。 重要!如果您已经拥有带有规则的 web.config,请将其删除。通过 IIS 菜单创建/添加规则。这样 IIS 将激活重要的 ARP 模块。

【讨论】:

什么是ARP模块?你的意思是Application Request Routing module?【参考方案12】:

转到 IIS管理器->服务器节点->应用请求路由缓存->服务器代理设置->勾选启用代理复选框。

【讨论】:

以上是关于IIS UrlRewrite 不适用于 IIS 8的主要内容,如果未能解决你的问题,请参考以下文章

powershell 一个基本的PowerShell脚本,用于将IIS 7应用程序请求路由(tl; dr; UrlRewrite的反向代理功能)推送到多个服务器。

node + express + iis + iisnode + urlrewrite搭建站点

IIS7 urlrewrite 模块 - 外部 xml 文件中的规则

Windows 2008 R2上配置IIS7或IIS7.5中的URLRewrite(URL重写)实例

iis url重写模块 是干啥用的

为啥 cURL 不适用于 IIS7 上的 Windows 身份验证?