IIS7根目录到子目录的URL重定向

99

我正在使用带有IIS7的Windows Server 2008。 我需要将访问www.mysite.com的用户重定向到wwww.mysite.com/menu_1/MainScreen.aspx。 这是我项目的文件结构:

-Sites
 -Default Web Site
  -Menu_1
  -MenuService
  -VscWebService

我非常感谢任何对此的帮助。


编程和服务器管理之间有一条微妙的界限(由于“Dev Ops”的流行,这条界限变得越来越模糊)。即便如此,Stack Overflow和Server Fault仍然保持着两个站点之间的明确区分,而这篇内容应该属于Server Fault,因为它更多地涉及配置工具(IIS)而非编程。 - machineghost
4个回答

161

在这里,您可以将以下代码添加到您的 web.config 文件中:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Root Hit Redirect" stopProcessing="true">
                <match url="^$" />
                <action type="Redirect" url="/menu_1/MainScreen.aspx" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

它将执行301永久重定向(URL将在浏览器中更改)。如果您希望这样的“重定向”是不可见的(重写,内部重定向),则使用此规则(唯一的区别是将"Redirect"替换为"Rewrite"):

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Root Hit Redirect" stopProcessing="true">
                <match url="^$" />
                <action type="Rewrite" url="/menu_1/MainScreen.aspx" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

2
谢谢你的回复。对我来说还是不起作用。首先我将其添加到了wwwroot web.config中,但并没有起作用。所以我打开了服务器级别的URL重写(服务器>站点>默认网站),但仍然不起作用。我在这里做错了吗?再次感谢您的帮助。 - user881148
2
@user881148 这个规则肯定是有效的——在发布之前我已经测试过了。1)也许它放错了顺序/位置?规则的顺序很重要:如果您已经有一些规则,请在其他规则之前添加此规则。2)“服务器>站点>默认网站”——这不是服务器级别——它只是由IIS安装程序创建的默认普通网站——没有更多的东西。3)尝试通过GUI(IIS管理器)手动创建此规则——它很简单——只需要填写几个字段即可。4)也许您的ASP.NET路由处理所有重写并忽略URL Rewrite模块。以某种方式检查这一点(抱歉,我不擅长ASP.NET)。 - LazyOne
@Munchkin 正确。当您访问网站根目录(例如 http://www.domain.com/)时,路径将为空,因此使用 ^$(前导斜杠会自动从路径中删除;在 Apache 中也是如此)。 - LazyOne
1
@mythofechelon 是的,即使在IIS 10(Windows 10 / Windows Server 2016)中,URL重写模块仍未捆绑,必须单独安装。 - LazyOne
2
我建议使用<match url="^\/?$" />,以确保如果用户在URL末尾指定了 / ,它仍能正常工作。 - Marijus Ravickas
显示剩余10条评论

53
我认为,这可以在没有IIS URL Rewrite模块的情况下完成。<httpRedirect>支持通配符,因此您可以按照以下方式进行配置:
  <system.webServer>
    <httpRedirect enabled="true">
      <add wildcard="/" destination="/menu_1/MainScreen.aspx" />
    </httpRedirect>
  </system.webServer>

请注意,在IIS上需要启用“HTTP重定向”功能 - 请参见HTTP重定向


16

我无法通过已接受的答案使其生效,主要是因为我不知道在哪里输入那段代码。我到处寻找关于URL Rewrite工具的解释,但始终找不到任何有意义的内容。最终我使用了IIS中的HTTP Redirect工具。

  1. 选择您的站点
  2. 在IIS部分中单击HTTP Redirect(确保已安装角色服务)
  3. 选中“将请求重定向到此目标”
  4. 输入您想要重定向的位置。在您的情况下,“wwww.mysite.com/menu_1/MainScreen.aspx”
  5. 在重定向行为中,我发现必须选中“仅重定向到此目录中内容(而不是子目录)的请求”,否则它会进入循环。看看哪种方式适用于您。

希望这可以帮到您。


1
这个解决方案存在问题。如果将http://server/重定向/重写为http://server/Folder/,访问http://server/Folder(注意没有斜杠)将被重定向到http://server/Folder/Folder,很可能会返回404错误。 - arid1
好久没处理这个了,但我似乎记得发生了这种情况,并且这是我进行步骤5的原因。你有确认过吗? - Jarrod
1
我真的记不清了,但我相信是这样的。请注意,在我的情况下,IIS将/Folder视为文件而不是目录,因此它会重定向到子目录,并且不会被“(不包括子目录)”排除。 - arid1

4
您需要从微软官网下载此工具:http://www.microsoft.com/en-us/download/details.aspx?id=7435
该工具名为“Microsoft URL Rewrite Module 2.0 for IIS 7”,微软的描述如下: “URL Rewrite Module 2.0 提供了一种基于规则的重写机制,可以在 Web 服务器处理请求 URL 之前更改请求的 URL,并在将响应内容提供给 HTTP 客户端之前修改响应内容。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接