Asp.net 如何在IIS重写模块中为我的站点创建自定义规则
我在试图使用根路径中的Web.Config文件为IIS 8.0上的重定向应用程序路径编写2条规则时遇到问题 1) 我需要将这些URL的“www.misite.com”和“missite.com”重定向到“~/main”文件夹。 2) 我需要将URL“subdomain.misite.com”重定向到“~/subdomain”文件夹 对于我正在使用的第一个:Asp.net 如何在IIS重写模块中为我的站点创建自定义规则,asp.net,iis,web-config,Asp.net,Iis,Web Config,我在试图使用根路径中的Web.Config文件为IIS 8.0上的重定向应用程序路径编写2条规则时遇到问题 1) 我需要将这些URL的“www.misite.com”和“missite.com”重定向到“~/main”文件夹。 2) 我需要将URL“subdomain.misite.com”重定向到“~/subdomain”文件夹 对于我正在使用的第一个: <rule name="Redirect to Main" stopProcessing="true"> &
<rule name="Redirect to Main" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^www.misite.com(/.*)?$" />
<add input="{REQUEST_URI}" negate="true" pattern="/main" />
</conditions>
<action type="Redirect" url="http://www.misite.com/main/{R:1}" />
</rule>
<rule name="Redirect to Main" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^misite.com(/.*)?$" />
<add input="{REQUEST_URI}" negate="true" pattern="/main" />
</conditions>
<action type="Redirect" url="http://www.misite.com/main/{R:1}" />
</rule>
对于第二个:
<rule name="Redirect to Subdomain" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^subdomain.misite.com(/.*)?$" />
<add input="{REQUEST_URI}" negate="true" pattern="/subdomain" />
</conditions>
<action type="Redirect" url="http://www.misite.com/subdomain/{R:1}" />
</rule>
第一条规则行得通,但第二条规则是当我尝试浏览“subdomain.misite.com”时,我被重定向到http://www.misite.com/main/subdomain“
我将感谢您的帮助。我认为您在这里混淆了重定向和重写-您描述的行为正是根据引用的规则我所期望的。最初,请求被重定向到www.misite.com/subdomain,然后根据您的第一条规则,请求再次被重定向到www.misite.com/main/subdomain。我认为您想在这里做的是重写请求,为每个子域提供正确的内容 重定向实际上意味着“如果URL‘a’的请求到达,请将浏览器转发到URL‘B’”。重写请求实际上意味着“如果接收到对URL‘a’的请求,那么就如同在URL‘a’上一样为资源‘B’提供服务” 我假设你有以下结构- -wwwroot --主要 --子域 大概您希望发生的是,当用户访问www.domain.com/default.aspx时,“main”目录中的default.aspx文档将被提供,同样,当用户访问subdomain.domain.com时,“subdomain”目录中的default.aspx文档将被返回 我还假设您不希望文件夹本身成为路径的一部分,即不是subdomain.domain.com/subdomain/default.aspx
<rule name="Rewrite to Main directory" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^www.misite.com(/.*)?$" />
<add input="{PATH_INFO}" negate="true" pattern="/main/" />
</conditions>
<action type="Rewrite" url="/main/{R:1}" />
</rule>
<rule name="Redirect to WWW" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^misite.com(/.*)?$" />
</conditions>
<action type="Redirect" url="http://www.misite.com/{R:0}" redirectType="Permanent" />
</rule>
)并且会给你带来分析方面的问题。在这种情况下,我选择将domain.com/default.aspx重定向到www.domain.com/default.aspx,但选择另一种方式也同样有效-您只需要做出选择并在您的站点中一致地应用它
我已经删除了重定向路径/URL的/main/部分,因为/main/目录中的内容无论如何都是请求应该提供的内容,将其保留在路径中实际上是在寻找/main/main/default.aspx。我还在第一条(重写)规则中的path info条件中添加了一个否定,这意味着如果确实有针对www.domain.com/main/default.aspx的请求到达,它将不会被重写以提供子目录中的内容-/main/default.aspx将被提供,而不是/main/main/default.aspx中的(可能不存在)文件
最后,子域也更改为重写
<rule name="Rewrite for Subdomain" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^subdomain.misite.com(/.*)?$" />
<add input="{PATH_INFO}" negate="true" pattern="/subdomain/" />
</conditions>
<action type="Rewrite" url="/subdomain/{R:1}" />
</rule>
有关此主题的详细信息