IIS7 URL 重写规则未应用于网站级别

IIS7 URL 重写规则未应用于网站级别

我正在尝试使用 IIS7 模拟在单个网站上托管多个域。

我设置了一个文件夹结构,其中有一个 web_root 文件夹,其中包含一个简单的 index.html、一个 web.config 和一个包含 asp.net web 应用程序的文件夹 (connect)。我尝试添加一个 URL 重写规则,该规则会将请求发送到主机 localhost.nerdfurio.us 并将其指向 connect 文件夹(我也将 localhost.nerdfurio.us 添加到我的主机文件中)。

web_root 中的 web.config 如下所示

<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
        </modules>
        <rewrite>
            <rules>
                <rule name="nerdfurious" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^localhost.nerdfurio.us$" />
                        <add input="{PATH_INFO}" pattern="^/connect/" />
                    </conditions>
                    <action type="Rewrite" url="connect/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

当我在浏览器中输入“localhost.nerdfurio.us”时,我会获取 index.html 文件的内容。如果我在浏览器中输入 localhost.nerdfurio.us/connect,我会收到 404 错误列表“http://localhost.nerdfurio.us:80/connect/connect/' 作为请求的 URL。我遗漏了什么?

答案1

问题是,{PATH_INFO}规则需要negate="true"在标签中有一个属性。这意味着当模式不匹配时。因为当我访问根目录时,“/connect/”不在 URL 中,所以执行重写操作的所有条件都不满足。

相关内容